从现有实例创建新实例,新类实例更改现有类参数

时间:2016-01-30 17:23:14

标签: java instance clone

我们说我们有这样的设置

public class foo {
    int number = 0;
    public void setNumber(int number) {
         this.number = number;
    }
}

public class bar extends foo {
    /* Some other utilities added to the foo class */
    public bar() {
         super();
    }
}

我们正在运行此任务

Scheduler.schedule(1000/* Every second */, () -> {
    fooManager.forEach(f -> System.out.println(f.getNumber()));
})

现在,如果我们这样做:

Foo fo = new foo();
fooManager.store(fo);
Bar ba = new bar();

如何在bafo访问setNumber() ba.setNumber()方法,而无需在fo中存储ba并执行ba.getFoInstance().setNumber()然后改为ba.setNumber()

解释v2:我希望ba.setNumber()致电fa.setNumber()

正在寻找类似这样的内容:Bar ba = fo但是您不能这样做,因为它会抛出ClassCastException

2 个答案:

答案 0 :(得分:2)

在我看来,你想要达到的是proxy object。 为什么不想在Bar类的实例中保留对public class Bar extends Foo { private Foo fa; public bar(Foo fa) { super(); this.fa = fa; } @Override public void setNumber (int number) { fa.setNumber(number); } @Override public int getNumber () { return fa.getNumber(); } } 的引用?这可能是有道理的:

Bar

您还应该避免Foo扩展FilterRegistrationBean,它们应该只是实现共享通用方法的相同接口。

答案 1 :(得分:0)

不知何故,bafo需要保留对同一number变量的引用。因此,ba保留对fo的引用,或者foba都引用包含number的公共对象。