繁体   English   中英

动态返回类型 - Java泛型

[英]Dynamic return type - Java Generics

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

我需要对我得到的对象进行处理。 两者都有相同的过程集。 所以我想写这两个类的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;
  }

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

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

从理论上说,你可以参数化MyClassAResultA ,如MyClassA<ResultA>但它很可能只是做一个惹出来的代码。

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

你能做的最好的就是有一个函数,并根据某些条件转换你的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM