use*_*061 4 java inheritance subclass pojo superclass
我有一组具有共同超类的POJO.它们存储在类型超类的二维数组中.现在,我想从数组中获取一个对象并使用子类的方法.这意味着我必须将它们转换为子类.有没有办法在不使用instanceof的情况下执行此操作?
更新:作为一个具体的例子:http://obviam.net/index.php/the-mvc-pattern-tutorial-building-games/请参阅:"点击敌人时添加新动作(攻击)"
是的 - 您可以通过反转流来完成:当基类的实例是特定类型时,代替您的代码执行操作,将操作项传递给对象,并让对象决定是否执行它.这是访客模式背后的基本技巧.
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)