Java继承和包装
我有一个生成的对象,我想:Java继承和包装,java,inheritance,code-generation,wrapper,Java,Inheritance,Code Generation,Wrapper,我有一个生成的对象,我想: 保留的现有功能,而无需注入构造函数并重写每个方法来调用injectedObject.sameMethod() 向生成的对象添加附加功能,而不修改生成的对象 将附加功能添加到 例如: public class GeneratedObject { public String getThis() { ... } public String getThat() { ... } } public interface ObjectWrapper { St
injectedObject.sameMethod()
public class GeneratedObject {
public String getThis() { ... }
public String getThat() { ... }
}
public interface ObjectWrapper {
String doThisWithThat();
}
public class ObjectWrapperImpl extends GeneratedObject implements ObjectWrapper {
String doThisWithThat() { ... }
}
但是,向下转换是不允许的,如果不重写一堆冗余代码来包装对象,那么正确的实现是什么?我认为可能会对您有所帮助:“decorator模式可以用于在运行时扩展(装饰)某个对象的功能,而不依赖于同一类的其他实例”您尝试过aspectj吗?这有点复杂,但您的请求也有点复杂。如果您可以从
GeneratedObject
提取接口,则可以使用。您将创建一个代理,该代理实现了提取的接口和ObjectWrapper
,并使用调用处理程序将GeneratedObject
接口中对方法的所有调用传递给委托,并将doThisWithThat()
调用发送到其他地方
代理并不漂亮,但丑陋至少是很好地本地化了。
在不修改生成对象的情况下为生成的对象添加附加功能。
如果我理解正确,这听起来像是我想在房间里加一张桌子,而不去碰房间。
我希望矛盾是显而易见的。此外,我不完全理解这个问题。这个例子有什么关系?可能是组合而不是继承?@cklab为了符合你的类比,我想说的是,我想在房间外面加一张桌子,同时还能进入我的房间
不。在decorator模式中,您完全需要重写所有委托给支持实例的方法。-1:似乎他无法控制GenerateObject
。在这种情况下,必须使用动态代理(至少部分)实现装饰器模式。