Учитывая следующие классы, интерфейс Fruit
, пример реализации и класс FruitBasket
, который содержит экземпляры Fruit
объектов:
private interface Fruit {
}
private static class Apple implements Fruit {
private String type;
// ommitted
}
private static class FruitBasket {
private Collection<Fruit> fruits = new ArrayList<>();
// ommitted
}
Теперь для классов сущностей (все аннотации опущены), определены следующие классы:
private static class FruitEntity {
}
private static class AppleEntity extends FruitEntity {
private String type;
// ommitted
}
private static class FruitBasketEntity {
private Collection<FruitEntity> fruits = new ArrayList<>();
// ommitted
}
Теперь, если вы выполните
ModelMapper mapper = new ModelMapper();
FruitBasket basket = new FruitBasket();
basket.fruits.add(new Apple());
FruitBasketEntity entity = mapper.map(basket, FruitBasketEntity.class);
, entity
действительно имеет объекты типа FruitEntity
, но как настроить маппериспользовать правильный тип реализации для преобразования?
Кроме того, обратное сопоставление не работает, поскольку Fruit
является интерфейсом и не имеет общедоступного конструктора.
FruitBasketEntity basketEntity = new FruitBasketEntity();
basketEntity.fruits.add(new FruitEntity());
// does not work
FruitBasket basket = mapper.map(basketEntity, FruitBasket.class);
Исходный код здесь .