我们说我们有这样的设置
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();
如何在ba
上fo
访问setNumber()
ba.setNumber()
方法,而无需在fo
中存储ba
并执行ba.getFoInstance().setNumber()
然后改为ba.setNumber()
解释v2:我希望ba.setNumber()
致电fa.setNumber()
正在寻找类似这样的内容:Bar ba = fo
但是您不能这样做,因为它会抛出ClassCastException
。
答案 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)
不知何故,ba
和fo
需要保留对同一number
变量的引用。因此,ba
保留对fo
的引用,或者fo
和ba
都引用包含number
的公共对象。