java - 动态返回类型 - Java 泛型

标签 java list generics dynamic types

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

我需要对我得到的对象进行处理。两者都有相同的一组要应用的流程。所以我想为这两个类编写通用函数。我尝试编写,但我不清楚如何实现它。

 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

我无法用一个接口(interface)来包装这两者。所以这个选项被排除了。

doProcess 看起来像这样:

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

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

最佳答案

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

理论上,您可以参数化 MyClassAResultA ,如MyClassA<ResultA> ,但它可能只会让你的代码变得一团糟。

关于java - 动态返回类型 - Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034227/

相关文章:

java - 使用 ListView 中的删除按钮删除行

java - 如何在运行时在方法中 Autowiring 类

java - 重载具有不同访问修饰符、返回类型和参数的方法是否仍然被视为重载?

python - 对列表列表进行排序以查找共享变体

Java 类型推断 : reference is ambiguous in Java 8, 但不是 Java 7

java - 将 Java 1.5 兼容代码转换为 Java 1.4

list - 将列表作为函数参数传递并从函数返回列表

python - 访问列表中元组中的值

delphi - 与泛型的接口(interface) - 设置为 NIL

java - 将类类型存储在 bean 中