Собрать все вместе в более сложный пример непросто. Я получаю ряд ошибок компиляции.
Можете ли вы помочь правильно понять этот сложный пример? Это может быть полезно и для других. Я также знаю, что BaseObjectData, конечно, неправильный.
Интерфейс:
Код: Выделить всё
public interface ComparatorBase {
List isSame(T otherObject);
}
Код: Выделить всё
public record Difference(String id, String left, String right) { }
Код: Выделить всё
@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;
}
}
Код: Выделить всё
@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));
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... -interface