避免实例

use*_*061 4 java inheritance subclass pojo superclass

我有一组具有共同超类的POJO.它们存储在类型超类的二维数组中.现在,我想从数组中获取一个对象并使用子类的方法.这意味着我必须将它们转换为子类.有没有办法在不使用instanceof的情况下执行此操作?

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

das*_*ght 6

是的 - 您可以通过反转流来完成:当基类的实例是特定类型时,代替您的代码执行操作,将操作项传递给对象,并让对象决定是否执行它.这是访客模式背后的基本技巧.

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!");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

  • POJO不能包含功能的整个概念在哪里出现?我在其他一些项目中看到了这一点.对象旨在包含数据和行为.如果它们只包含数据,它们就不是pojos ......它们就是豆子 (2认同)