Java Generics — более сложный пример с наследованием и интерфейсомJAVA

Программисты JAVA общаются здесь
Anonymous
Java Generics — более сложный пример с наследованием и интерфейсом

Сообщение Anonymous »

Большинство руководств по Java по теме «Обобщенные шаблоны» объясняют работу с классами и методами. Это довольно просто.
Собрать все вместе в более сложный пример непросто. Я получаю ряд ошибок компиляции.
Можете ли вы помочь правильно понять этот сложный пример? Это может быть полезно и для других. Я также знаю, что BaseObjectData, конечно, неправильный.
Интерфейс:

Код: Выделить всё

public interface ComparatorBase {
List isSame(T otherObject);
}
С отличием:

Код: Выделить всё

public record Difference(String id, String left, String right) { }
Базовый класс (Ошибки: неизвестные методы: OtherObject.getId() или getObjectValue1()):

Код: Выделить всё

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@Builder
public class BaseObjectData implements ComparatorBase {
private String id;
private String objectValue1;
private String objectValue2;

@Override
public List isSame(T otherObject) {
List differences = new ArrayList();
if( ! getObjectValue1().equals( otherObject.getObjectValue1())) {
differences.add( new Difference( getId(), getObjectValue1(), otherObject.getObjectValue1()));
}
if( ! getObjectValue2().equals( otherObject.getObjectValue2())) {
differences.add( new Difference( getId(), getObjectValue2(), otherObject.getObjectValue2()));
}
return differences;
}

T findMatchingObject( List otherObjects) {
for( T object: otherObjects) {
if( object.getId().equals( id)) {
return object;
}
}
return null;
}
}
Затем унаследованный класс: (Ошибка: неизвестный метод: OtherObject.getObjectValue3())

Код: Выделить всё

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class InheritLevel1Data extends BaseObjectData implements ComparatorBase {
private String objectValue3;

public InheritLevel1Data( String id, String d1, String d2, String d3) {
super( id, d1, d2);
this.objectValue3 = d3;
}
@Override
public List isSame(T otherObject) {
List differences = super.isSame( otherObject);
if( ! getObjectValue3().equals( otherObject.getObjectValue3())) {
differences.add( new Difference( getId(), getObjectValue3(), otherObject.getObjectValue3()));
}
return differences;
}
}
Тестовый класс:

Код: Выделить всё

public class RunnerTest {
private static final Logger logger = Logger.getLogger( "My logger");
public static void main(String[] args) {
List objectDataList1 = buildList( "id-1", "data-1", "data-2", "data-3b");
List objectDataList2 = buildList( "id-1", "data-1", "data-2a", "data-3");
List differences = new ArrayList();
for( BaseObjectData o: objectDataList1) {
BaseObjectData o2 = (BaseObjectData) o.findMatchingObject( objectDataList2);
differences.addAll( o.isSame( o2));
}
differences.forEach( v -> logger.info( "Verschil: " + v));
}

private static List buildList( String id, String data1, String data2, String data3) {
return List.of(
new BaseObjectData( "BO_" + id, data1, data2),
new InheritLevel1Data( "ID1_" + id, data1, data2, data3));
}
}
Выходные данные должны давать различия: данные-2 против данных-2a И данные-3a против данных-3 и т. д.

Подробнее здесь: https://stackoverflow.com/questions/781 ... -interface

Вернуться в «JAVA»