可以用父类的新实例刷新的Java子类



我正在使用Java AWS API来监控一些EC2实例,每次刷新时我都需要查询返回一堆Instance对象(新构建的)的服务。我想扩展这些对象的功能,我想我可以维护一个MyInstance对象的映射,它可以在每次投票时用新的Instance来刷新。

现在我可以很容易地做到这一点,用一个简单的包装器类,持有原始的Instance作为属性,问题是我想保持访问基本的Instance API,因为我已经在我的代码中使用这些函数。是否有可能只替换实例化对象的超类部分?我想要的一个做作的例子:

class Instance {
    protected int prop;
    public Instance(int prop) {
        this.prop = prop;
    }
}
class MyInstance extends Instance {
    protected int prop2;
    public MyInstance(int prop, int prop2) {
        super(prop);
        this.prop2 = prop2;
    }
}
MyInstance foo = new MyInstance(1, 2);
Instance foster = new Instance(3);
//what i want to do
foo.adoptedBy(foster);
//with the result that foo.prop == 3

显然,这个例子将是微不足道的转换,但在我的实际情况下,有更多的属性需要转移。Reflection能做到吗?如果我每秒使用Reflection执行10次这样的操作,会对性能产生什么样的影响?感谢阅读!

最好的解决方案是将你的两个想法结合起来:

  1. 将原始实例包装在扩展Instance类的类中。(在子类的构造函数中,您可以创建一个新的Instance对象并设置它)
  2. 将所有方法委托给包装实例(并添加新属性)
  3. 在您的foster方法中,您只需更改包装的Instance。

    class Instance {
      private int prop;
      public Instance(int prop) {
        this.prop = prop;
      }
    
      public int getProp() {
        return prop;
      }
    }
    class MyInstance extends Instance {
      private Instance delegate;
      private int prop2;
      public MyInstance(Instance delegate, int prop2) {
        super(prop);
        this.delegate = delegate;
        this.prop2 = prop2;
      }
      @Override
      public int getProp() {
        return delegate.getProp();
      }
      public int getProp2() {
        return prop2;
      }
      public void foster(Instance i) {
        delegate = i;
      }
    }
    MyInstance foo = new MyInstance(1, 2);
    Instance foster = new Instance(3);
    //what i want to do
    foo.adoptedBy(foster);
    //with the result that foo.getProp() == 3
    

相关内容

  • 没有找到相关文章

最新更新