我已經實現了一個小框架,用於將A
類型的泛型實體轉換爲B
類型之一。Java通用類映射器多對一
所以我創建了一個接口:
public interface IConvert<A,B> {
public B convert (A entity);
public List<B> convertList(List<A> entitylist);
}
而且一個抽象類來概括convertList
方法:
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>();
for (A a : entitylist) {
bs.add(convert(a));
}
return bs;
}
}
假設我們有一個BClass
實例映射到一個AClass
實例:
public class AClassConverter extends AbstractConverter<BClass, AClass>{
@Override
public AClass convert(BClass entity) {
return new AClass(); //BClass to AClass mapping
}
}
我可以簡單地定義一個新類AClassConverter
,擴展了抽象類並實現了具體的轉換方法。 convertList
方法是免費的。
我想要了解的是如何推廣的米到一個類型轉換器,而不需要總是重新實現convertList
方法實體:
public class AClassConverter extends AbstractConverter<BClass, AClass> {
@Override
public AClass convert(BClass entity) {
return new AClass(); //BClass to AClass mapping
}
public AClass convert(CClass entity) {
return new AClass(); //CClass to AClass mapping
}
public List<AClass> convert(List<CClass> entityList) {
//foreach > call convert(c);
//return aClassList;
}
}
考慮到AClass
,BClass
和CClass
不擴展任何普通類(除了Object
)。 而AClass
,BClass
和CClass
沒有交叉引用(AClass
是不知道的BClass
,所以我不能在BClass
東西定義爲convertToAClass
...)。
我需要的東西,如:
public class AClassConverter extends AbstractConverter<BClass, AClass> , AbstractConverter<CClass, AClass>
!
關心,並抱歉的混淆。
感謝您的回答。問題是 公共接口IConverter_Multi { 公共IConvert_Bi of_Bi(T1實體); 公共IConvert_Bi of_Bi(T2實體); (T3實體)的公共IConvert_Bi ; } 生成一個「名稱衝突具有相同的擦除」錯誤 –
現在我已經更新我的答案。你是對的,我忽略了擦除錯誤。我注意到,我們可以做出IConverter_Multi類(名爲Multi_Converter現在),而不是與任何損失來解決這個問題的接口。 – Susanta