0

2 つの類似したオブジェクト (実際にはエンティティ) があります。関数から、それらのいずれかを取得します。したがって、ランタイム中にのみ取得したものを知っています。

取得したオブジェクトを処理する必要があります。両方とも、適用されるプロセスのセットは同じです。したがって、これらのクラスの両方にジェネリック関数を記述したいと思います。書いてみましたが、これを実装する方法が明確にわかりませんでした。

 List<MyClassA> objAList;
 List<MyClassB> objBList:
 List<ResultA> resultObjAList;
 List<ResultB> resultObjBList;

 objAList = getResult();
 objBList = getResult()

 if ( objAList != null ) {
     // Set of function calls on ObjA to process further. For ex:
    resultObjAList =   doProcess(objAList);

 } else {
     // Same set of function class to process. For Ex:
     resultObjBList = doProcess(objBList);
 }

いくつかの試行の後、これらのクラスのそれぞれを処理するために、似たように見える 2 つの異なる関数を作成することに決めようとしています。

doProcess上記の関数に注意してください。or を取り、objAorobjBを返しresultObjAますresultObjB

これらの両方をインターフェイスでラップすることはできません。したがって、オプションは除外されます。

doProcess次のようになります。

  List<ResultA> doProcess( List<MyClassA> A ) {
     for ( MyClassList a : A ) {
          a.getSomething();
          doanotherProcess(a.getxya(), a.getABC());
          ....
     }
     return AnotherListOfType_ResultA;
  }

これに対してジェネリック関数を書くことは可能ですか?

4

2 に答える 2

1

のような 2 つの関数を記述したい場合でも
public void doProcess(List<ObjectA> list); public void doProcess(List<ObjectB> list); それは不可能です。ジェネリックはコンパイル時の構成のみであるため、両方の関数の消去は同じです。

あなたができる最善のことは、関数を持ち、何らかの条件に基づいてオブジェクトをキャストすることです。

于 2013-08-03T16:09:44.663 に答える
1

入力を に、List<MyClassA>入力をに汎用的にマップしたい場合、これは不可能であると答えることができます。入力型に対する結果型の依存関係を Java Generics で表現する方法はありません。ResultAList<MyClassB>ResultB

理論的には、 のように でパラメータ化できますMyClassAが、おそらくコードが混乱するだけです。ResultAMyClassA<ResultA>

于 2013-08-03T15:57:26.877 に答える