Орика картограф - Подтип поля

У меня есть следующие конкретные классы:

public class A1 {} 

public class B1 extends A1 {}

public class A2 {}

public class B2 extends A2 {}

public class B3 extends A2 {}

И я бы хотел получить экземпляр B2 при отображении MapperFacade.map(b1Instance, A2.class)

Мне это нужно, потому что у A2 много подтипов (B2 и B3, как показано), и мне нужно сопоставить соответствующий, когда это необходимо.

Можно ли этого добиться с помощью Orika?


person Cirou    schedule 01.08.2017    source источник


Ответы (1)


Для людей, которые столкнутся с той же проблемой, я решил это, создав CustomMapper, подобный этому, который проверяет, какой подтип для создания экземпляра

mapperFactory.classMap(SOURCE.class, DEST.class)
                    .customize(new CustomMapper<SOURCE, DEST>() {
        @Override
        public void mapAtoB(SOURCE source, DEST dest, MappingContext context) {

            //verifies the type to instantiate
            private A2 a2 = isB2() ? new B2() : new B3;             
            //use the mapper for the class (will use the B2 or B3 mapper)
            mapperFacade.map(source.getA2(), a2);
            // set the field into the dest object
            dest.setB1(a2);

        }
} 
person Cirou    schedule 08.08.2017