我正在使用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个,我会看到什么样的性能影响?谢谢你的阅读!
答案 0 :(得分:0)
最好的解决方案是结合您的想法:
在您的福斯特方法中,您只需更改包装的实例。
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