我有两个相似的对象(实际上是实体)。从一个函数中,我得到其中一个。所以我知道我在运行时只得到了哪一个。
我需要对我得到的对象进行处理。两者都有相同的过程集。所以我想写这两个类的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;
}
是否可以为此编写通用函数?
答案 0 :(得分:1)
如果您想将List<MyClassA>
输入一般地映射到ResultA
和List<MyClassB>
输入到ResultB
,那么我可以回答这是不可能的:没有办法用Java Generics表示结果类型对输入类型的依赖性。
从理论上讲,您可以使用MyClassA
将ResultA
参数化,就像在MyClassA<ResultA>
中一样,但它可能会让您的代码混乱。
答案 1 :(得分:1)
即使你想写两个功能,如
public void doProcess(List<ObjectA> list);
和
public void doProcess(List<ObjectB> list);
这是不可能的,因为泛型只是编译时构造,因此两个函数都有相同的擦除。
你能做的最好的事情就是有一个功能,并根据某些条件投射你的物体。