从现有实例创建新实例,新 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.

不知何故,bafo 需要保留对同一个 number 变量的引用。因此,要么 ba 保留对 fo 的引用,要么 foba 都保留对包含 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,它们应该简单地实现共享通用方法的相同接口。