gpt4 book ai didi

java - 不使用instanceof的向下转换和多态? ( java )

转载 作者:行者123 更新时间:2023-12-04 05:50:31 24 4
gpt4 key购买 nike

这是我正在尝试做的事情:

class Foo {
private ArrayList<Widget> things; //Contains WidgetA, WidgetB and WidgetAB objects
//...
void process(int wIndex) {
process(things.get(wIndex);
}

private void process(WidgetA w) {
//Do things
}
private void process(WidgetB w) {
//Do other things
}
private void process(WidgetAB w) {
//Do completely different things
}
}

abstract class Widget {
//...
}

class WidgetA extends Widget {
//...
}
class WidgetB extends Widget {
}
class WidgetAB extends WidgetA {
}

基本上,一个单独的类从用户输入中获取一个数组索引,并将其传递给 process(int) 方法,该方法应该启动一个特定于类型的 process() 方法来处理传递索引处的对象。问题是这些对象被视为 Widget 对象,而不是 WidgetA 等。我猜我可以使用 instanceof 遍历类型,但我试图避免使用它。
process() 方法中的逻辑需要访问 Foo 类中的私有(private)字段,因此将它们移动到 Widget 子类可能不是最好的主意。

所以问题是,有没有一种方法可以为给定的 Widget 子类型调用正确的 process() 方法,而不使用 instanceof?

最佳答案

是的,看看访客模式 - 也称为双重调度。

关于java - 不使用instanceof的向下转换和多态? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10112275/

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