动态返回类型 - Java泛型

时间:2013-08-03 15:08:12

标签: java list generics dynamic types

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

我需要对我得到的对象进行处理。两者都有相同的过程集。所以我想写这两个类的Generic函数。我试着写,但我不明白如何实现这个。

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

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

2 个答案:

答案 0 :(得分:1)

如果您想将List<MyClassA>输入一般地映射到ResultAList<MyClassB>输入到ResultB,那么我可以回答这是不可能的:没有办法用Java Generics表示结果类型对输入类型的依赖性。

从理论上讲,您可以使用MyClassAResultA参数化,就像在MyClassA<ResultA>中一样,但它可能会让您的代码混乱。

答案 1 :(得分:1)

即使你想写两个功能,如
 public void doProcess(List<ObjectA> list); public void doProcess(List<ObjectB> list); 这是不可能的,因为泛型只是编译时构造,因此两个函数都有相同的擦除。

你能做的最好的事情就是有一个功能,并根据某些条件投射你的物体。