2017-08-01 2 views
0

Je les classes concrètes suivantes:Orika mappeur - sous-type terrain

public class A1 {} 

public class B1 extends A1 {} 

public class A2 {} 

public class B2 extends A2 {} 

public class B3 extends A2 {} 

Je voudrais obtenir une instance B2 lors du mappage MapperFacade.map(b1Instance, A2.class)

J'ai besoin parce que A2 a de nombreux sous-types (B2 et B3 comme montré) et j'ai besoin de cartographier celui qui convient en cas de besoin

Est-il possible de réaliser cela avec Orika?

Répondre

0

Pour les gens qui sont confrontés au même problème, je résolus de cette création d'un CustomMapper comme celui-ci qui vérifie qui est le sous-type à instancier

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); 

     } 
}