我可能对此有错误的想法,但请耐心等待......
我有一个函数,我想用多个子类类型ComboA,ComboB等之一调用(都扩展了超类“Combos”)。
ArrayList<Combos> combos = null; //of type combos, which is super class of Combo A and Combo B
switch (which) {
case 1:
combos = CombosA; //this is of type ComboA
break;
case 2:
combos = CombosB; //this is of type ComboB
break;
}
根据switch语句,我希望函数(组合)中的单个变量保留子类的所有类函数。这样我就不必为每个Combo类型创建一堆函数 - 我想使用相同的变量名(组合),而不管它是哪个子类。
我尝试使用泛型,但问题是,CombosA和CombosB变量是在这个范围之外定义的,全局到类,我不知道如何使用泛型,除非我将函数定义为
public <E extends Combos> void Test(ArrayList <E> CombosA)
或类似的东西,我想这将需要在非全局的函数调用中发送另一个单独的变量。我可能能够复制CombosA数组列表并将副本发送到函数中以使泛型函数工作,但我认为必须有更好的方法。
非常感谢任何帮助!
答案 0 :(得分:0)
这取决于您接下来要对所选的“combo
”做什么。由于ComboA
和ComboB
是Combos
的子类,理想情况下,您只需调用“Combos”方法即可对每个组合执行常见操作。然后,每个子类都可以执行它自己的函数实现。
例如,如果您要对ComboA
或ComboB
等进行某种更新,那么{{1}中可能会有update()
方法(可能是抽象的) } .class。 Combos
的版本为ComboA
,update()
的版本为ComboB
。然后你的循环只是在调用update()
方法的组合上循环,知道每个方法都会做正确的事情,而不必指定类型。
这有帮助吗?