Java Generic Class Mapper Many to one -


i've realized little framework convert generic entity of type a 1 of type b.

so created interface:

public interface iconvert<a,b> {     public b convert (a entity);     public list<b> convertlist(list<a> entitylist); } 

and abstract class generalize convertlist method:

public abstract class abstractconverter<a,b> implements iconvert<a, b> {      @override     public abstract b convert(a entity) ;      @override     public list<b> convertlist(list<a> entitylist) {         list<b> bs=new arraylist<b>();         (a : entitylist) {             bs.add(convert(a));         }         return bs;     }     } 

suppose have map bclass instance aclass instance:

public class aclassconverter extends abstractconverter<bclass, aclass>{      @override     public aclass convert(bclass entity) {         return new aclass(); //bclass aclass mapping     } } 

i can define new class aclassconverter, extending abstract 1 , implement specific convert method. convertlist method free.

what i'm trying understand how generalize m 1 type converter without have reimplement convertlist method entity:

public class aclassconverter extends abstractconverter<bclass, aclass> {      @override     public aclass convert(bclass entity) {     return new aclass(); //bclass aclass mapping     }      public aclass convert(cclass entity) {         return new aclass(); //cclass aclass mapping     }      public list<aclass> convert(list<cclass> entitylist) {         //foreach > call convert(c);         //return aclasslist;     } } 

consider aclass, bclass, , cclass don't extend common class (apart object). , aclass, bclass, , cclass don't have cross reference (aclass unaware of bclass can't define in bclass converttoaclass...).

i'd need as:

public class aclassconverter extends abstractconverter<bclass, aclass> , abstractconverter<cclass, aclass> 

!!!

regards, , sorry confusion.

due lack of multiple inheritance in java cannot done quite easily.

however, @ cost of less elegant solution, refactor code pulling convertlist method static helper class.

maybe so:

public final class converterhelper {    private converterhelper() {}     public static <a,b> list<b> convertlist(iconvert<a,b> converter, list<a> list)    {       list<b> bs=new arraylist<b>();       (a : list) {          bs.add(converter.convert(a));       }       return bs;    } } 

you have use static helper method if wanted convert lists.


Comments