从现有实例创建新实例,新 class 实例更改现有 class 参数
create new instance from existing instance and new class instance change existing class params
假设我们有这样的设置
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
访问 ba.setNumber()
上的 fo
setNumber()
方法而不将 fo
存储在 ba
中并执行 ba.getFoInstance().setNumber()
并执行 ba.setNumber()
而不是
说明 v2:我希望 ba.setNumber()
调用 fa.setNumber()
正在寻找类似这样的东西:Bar ba = fo
但你不能那样做,因为它会抛出 ClassCastException
.
不知何故,ba
和 fo
需要保留对同一个 number
变量的引用。因此,要么 ba
保留对 fo
的引用,要么 fo
和 ba
都保留对包含 number
.[=18= 的公共对象的引用]
在我看来,您要实现的目标是 proxy object。
为什么不希望在 Bar
class 的实例中保留对 Foo
的引用?它可能是这样的:
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
,它们应该简单地实现共享通用方法的相同接口。
假设我们有这样的设置
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
访问 ba.setNumber()
上的 fo
setNumber()
方法而不将 fo
存储在 ba
中并执行 ba.getFoInstance().setNumber()
并执行 ba.setNumber()
而不是
说明 v2:我希望 ba.setNumber()
调用 fa.setNumber()
正在寻找类似这样的东西:Bar ba = fo
但你不能那样做,因为它会抛出 ClassCastException
.
不知何故,ba
和 fo
需要保留对同一个 number
变量的引用。因此,要么 ba
保留对 fo
的引用,要么 fo
和 ba
都保留对包含 number
.[=18= 的公共对象的引用]
在我看来,您要实现的目标是 proxy object。
为什么不希望在 Bar
class 的实例中保留对 Foo
的引用?它可能是这样的:
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
,它们应该简单地实现共享通用方法的相同接口。