gpt4 book ai didi

java - 避免 instanceof

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:50 28 4
gpt4 key购买 nike

我有一组具有公共(public)父类(super class)的 POJO。这些存储在 superclass 类型的二维数组中。现在,我想从数组中获取一个对象并使用子类 的方法。这意味着我必须将它们转换为子类。有没有办法不使用 instanceof 来做到这一点?

更新:作为一个具体的例子:http://obviam.net/index.php/the-mvc-pattern-tutorial-building-games/请参阅:“单击敌人时添加新 Action (攻击)”

最佳答案

是的 - 你可以通过反转流程来做到这一点:当基类的实例是特定类型时,而不是你的代码做某事,传递一个 Action 项给对象,让对象决定是否执行它或不。这是 Visitor Pattern 背后的基本技巧.

interface DoSomething {
void act();
}
abstract class AbstractBaseClass {
abstract void performAction(DoSomething ds);
}
class FirstSubclass extends AbstractBaseClass {
public void performAction(DoSomething ds) {
ds.act();
}
}
class SecondSubclass extends AbstractBaseClass {
public void performAction(DoSomething ds) {
// Do nothing
}
}

AbstractBaseClass array[] = new AbstractBaseClass[] {
new FirstSubclass()
, new FirstSubclass()
, new SecondSubclass()
, new FirstSubclass()
, new SecondSubclass()
};
for (AbstractBaseClass b : array) {
b.performAction(new DoSomething() {
public void act() {
System.out.println("Hello, I'm here!");
}
});
}

关于java - 避免 instanceof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11415090/

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