1

type のジェネリック Entity をAType の 1 つに変換する小さなフレームワークを実現しましたB

だから私はインターフェースを作成しました:

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、特定の convert メソッドを実装するだけです。convertList方法は自由です。

私が理解しようとしているのはconvertList、エンティティのメソッドを常に再実装する必要なく、m から 1 型へのコンバーターを一般化する方法です。

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

AClassBClass、およびは、 CClass( を除く) 共通のクラスを拡張しないことを考慮してくださいObject。とAClassBClass、およびCClass相互参照がありません (AClassは認識していないため、何かでBClass定義することはできません... )。BClassconvertToAClass

次のようなものが必要です:

public class AClassConverter extends AbstractConverter<BClass, AClass> , AbstractConverter<CClass, AClass>

!!!

ご迷惑をおかけして申し訳ありません。

4

2 に答える 2

1

@cyon は、convertList をヘルパー クラスに引き出す必要があることは正しいです。

これが、あなたが求めていると思うものに対する私の解決策です。

public interface IConverter_Bi<T, T1> {
    public T convert (T1 entity);
}

public class Multi_Converter { // here m = 3
    public IConvert_Bi<T, T1> of_Bi (T1 entity){// impl}; // you can annoymously implement
    public IConvert_Bi<T, T2> of_Bi (T2 entity){// impl}; 
    public IConvert_Bi<T, T3> of_Bi (T3 entity){// impl};   
}

public class Util{

    public List<T> convertList(List<T1> entitylist, IConvert_Bi<T,T1> converter);
}

// here is some client code

// get the master converter
Multi_Converter master = ... impl    

// transform t2List (List<T2>) to List<T>

// get a bi-converter for T2. here is one of the possible ways
T2 aT2 = t2List.get(0);
t2Converter = master.of_Bi(t2List.get(0));

Uti.convertList(t2List, t2Converter)
于 2013-07-19T23:06:49.340 に答える