我有两个类似的对象(实际上是实体)。从函数中,我可以选择其中之一。所以我知道只有在运行时才得到哪一个。

我需要对得到的对象进行处理。两者都有相同的要应用的过程集。所以我想在这两个类中都写泛型函数。我试图写,但是我不清楚如何实现。

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


经过几次尝试,我决定决定编写两个不同的函数,它们看起来类似于对这些类中的每一个进行处理。

注意上面的doProcess函数。它使用objAobjB并返回resultObjAresultObjB

我不能用接口包装这两个。因此排除了选择。

doProcess看起来像这样:

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


是否可以为此编写通用函数?

最佳答案

如果您想将List<MyClassA>输入映射为ResultA,并且将List<MyClassB>输入映射为ResultB,那么我可以回答这是不可能的:无法用Java Generics表示这种结果依赖关系输入类型上的类型。

从理论上讲,您可以像在MyClassA中那样用ResultA参数化MyClassA<ResultA>,但这可能会使您的代码变得一团糟。

07-26 08:28