gpt4 book ai didi

java - 如何动态地将一个类键入为其子类之一

转载 作者:行者123 更新时间:2023-12-01 05:33:31 26 4
gpt4 key购买 nike

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

我有一个函数,我想使用多个子类类型 ComboA、ComboB 等之一来调用(所有子类类型都扩展父类(super class)“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 语句,我希望函数(组合)中的单个变量保留子类的所有类函数。这样我就不必为每个组合类型创建一堆函数 - 我想使用相同的变量名称(组合),无论它是哪个子类。

我尝试使用泛型,但问题是,CombosA 和 CombosB 变量是在此范围之外定义的,是类的全局变量,而且我不知道如何使用泛型,除非我将函数定义为

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

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

任何帮助将不胜感激!

最佳答案

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

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

这有帮助吗?

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com