我有两个类似的对象(实际上是实体)。从函数中,我可以选择其中之一。所以我知道只有在运行时才得到哪一个。
我需要对得到的对象进行处理。两者都有相同的要应用的过程集。所以我想在这两个类中都写泛型函数。我试图写,但是我不清楚如何实现。
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<MyClassB>
输入映射为ResultB
,那么我可以回答这是不可能的:无法用Java Generics表示这种结果依赖关系输入类型上的类型。
从理论上讲,您可以像在MyClassA
中那样用ResultA
参数化MyClassA<ResultA>
,但这可能会使您的代码变得一团糟。