我对此可能有错误的主意,但请忍受...

我有一个函数要与多个子类类型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语句,我希望函数(combos)中的单个变量保留子类的所有类函数。这样一来,我不必为每种Combo类型都创建一堆函数-我想使用相同的变量名(combos),而不管它是哪个子类。

我尝试使用泛型,但事实是,CombosA和CombosB变量是在此范围之外定义的,对于该类是全局的,并且除非将函数定义为

public <E extends Combos> void Test(ArrayList <E> CombosA)


或类似的东西,我猜这将需要在另一个不是全局的函数调用中发送另一个单独的变量。我也许可以复制CombosA数组列表,然后将副本发送到函数中,以使通用函数正常工作,但是,我认为必须有更好的方法。

任何帮助将不胜感激!

最佳答案

这取决于您接下来对选定的“ combo”要做什么。由于ComboAComboBCombos的子类,因此理想情况下,您只需调用“组合”方法即可对每个组合执行共同的操作。然后,每个子类都可以执行其自己的功能实现。

例如,如果要对ComboAComboB等进行某种更新,则update()类中可能有一个Combos方法(可能是抽象方法)。 ComboA的版本为update()ComboB的版本为update()。然后,您的循环仅循环调用update()方法的组合,就知道每个组合都可以执行正确的操作而无需指定类型。

有帮助吗?

关于java - 如何动态键入一个类作为其子类之一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8585766/

10-11 02:17