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

标签 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();

如何让 ba 访问 ba.setNumber() 上的 fo setNumber() 方法而不存储ba 中的 fo 并执行 ba.getFoInstance().setNumber() 并执行 ba.setNumber()

解释 v2:我希望 ba.setNumber() 调用 fa.setNumber()

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

最佳答案

在我看来,你想要实现的是 proxy object 。 为什么您不想在 Bar 类的实例中保留对 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,它们应该简单地实现共享通用方法的相同接口(interface)。

关于java - 从现有实例创建新实例,新类实例更改现有类参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35104718/

相关文章:

java - 使用 JInitator 的 Internet Explorer 8 中的 Oracle Forms/Applications

java - 为什么我得到这个 NullPointerException?

c# - 实例化包含 static void Main() 的类

rust - 如何修复Rust错误 “value used here after move”?

javascript - 克隆时的问题 - jquery

java - 为什么使用append()而不是+

c# - 为什么 System.Random 类不是静态的?

javascript - 创建自定义对象文字

javascript - 使用 Vue JS 复制输入字段,增加索引

java - 如何使用鼠标监听器调用另一个类?