[英]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
函数。 它接受objA
或objB
并返回resultObjA
或resultObjB
。
我不能用接口包装这两个。 所以选择被排除在外。
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>
输入一般地映射到ResultA
和List<MyClassB>
输入到ResultB
,那么我可以回答这是不可能的:没有办法用Java Generics表达结果类型的依赖性输入类型。
从理论上说,你可以参数化MyClassA
与ResultA
,如MyClassA<ResultA>
但它很可能只是做一个惹出来的代码。
即使你想写两个函数,如
public void doProcess(List<ObjectA> list);
和public void doProcess(List<ObjectB> list);
这是不可能的,因为泛型只是编译时结构,因此两个函数都有相同的擦除。
你能做的最好的就是有一个函数,并根据某些条件转换你的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.