如何动态地将类作为其子类之一键入

时间:2011-12-21 06:14:39

标签: java class generics

我可能对此有错误的想法,但请耐心等待......

我有一个函数,我想用多个子类类型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数组列表并将副本发送到函数中以使泛型函数工作,但我认为必须有更好的方法。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

这取决于您接下来要对所选的“combo”做什么。由于ComboAComboBCombos的子类,理想情况下,您只需调用“Combos”方法即可对每个组合执行常见操作。然后,每个子类都可以执行它自己的函数实现。

例如,如果您要对ComboAComboB等进行某种更新,那么{{1}中可能会有update()方法(可能是抽象的) } .class。 Combos的版本为ComboAupdate()的版本为ComboB。然后你的循环只是在调用update()方法的组合上循环,知道每个方法都会做正确的事情,而不必指定类型。

这有帮助吗?