动态返回类型-Java泛型
我有两个相似的对象(实际上是实体)。从一个函数中,我可以得到其中的一个。所以我知道我只在运行时得到了哪一个 我需要对我得到的物体进行处理。两者都有一套相同的应用过程。所以我想写这两个类的泛型函数。我试着写,但我不清楚如何实现这一点动态返回类型-Java泛型,java,list,generics,dynamic,types,Java,List,Generics,Dynamic,Types,我有两个相似的对象(实际上是实体)。从一个函数中,我可以得到其中的一个。所以我知道我只在运行时得到了哪一个 我需要对我得到的物体进行处理。两者都有一套相同的应用过程。所以我想写这两个类的泛型函数。我试着写,但我不清楚如何实现这一点 List<MyClassA> objAList; List<MyClassB> objBList: List<ResultA> resultObjAList; List<ResultB> resultObjBLi
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);
}
是否可以为此编写泛型函数?如果您想将
列表
输入映射到ResultA
并将列表
输入映射到ResultB
,那么我可以回答这是不可能的:无法用Java泛型来表示结果类型对输入类型的依赖性
理论上,您可以使用
ResultA
参数化MyClassA
,如MyClassA
,但这可能会把代码弄得一团糟。即使您想编写两个类似的函数
publicsvoiddoprocess(列表)代码>和
publicsvoiddoprocess(列表)代码>这是不可能的,因为泛型只是编译时构造,因此这两个函数具有相同的擦除
你能做的最好的事情就是拥有一个函数并根据某些条件强制转换你的对象。在MyClassA
和MyClassB
之间有继承关系吗?为什么您的doProcess
方法将List
作为参数?什么是MyClassList
?看看@RohitJain。这是两个不同的实体,但有一组相似的字段需要处理。但不完全一样<代码>我的类列表
。这是个打字错误。现在更新了,没错。我知道。这是办不到的。但基本上,这个想法是用不同的名称编写两个函数。我希望您可以使用一条规则“优先于实现的接口”,为ObjectA和ObjectB都提供一个公共接口,并且您可以在运行时轻松地根据类型进行调用。谢谢。我知道。但在我的网站上,我无法更改它。所以最好采用两种不同的方法路线?我想的原因是,如果我编写两个函数,它只会有重复的代码。将公共代码提取到第三种方法中,这样你就可以从两种特定类型的方法中重用它。我明白你的观点。但即使是第三种方法也无法解决问题。因为它需要再次接受两种类型的参数!对不起,如果这是我的代码,我把它都放在面前,也许我会想出一些办法。这样就不行了。
List<ResultA> doProcess( List<MyClassA> A ) {
for ( MyClassList a : A ) {
a.getSomething();
doanotherProcess(a.getxya(), a.getABC());
....
}
return AnotherListOfType_ResultA;
}