【发布时间】:2020-11-25 18:02:32
【问题描述】:
我想在另一个类上创建一个包装器类,以便它隐藏被包装类的功能,并且包装器提供自己的某些方法。
例如,假设我们有 A 类
public class A{
void method1(){ ... do something ... }
void method2(){ ... do something ... }
void method3(){ ... do something ... }
}
现在我想要另一个包装类A的B类,这样它就有自己的方法,而且如果有人问A类的方法,它应该把它委托给A类。
public class B{
// if someone asks method1() or method2() or method3() ... it should delegate it to A
// and also it has own methods
void method4(){ ... do something ... }
void method5(){ ... do something ... }
}
我不能使用继承(即 B 扩展 A),因为它在我的用例中并不容易(其中 A 具有带有一些我们无法获得的参数的具体构造函数......但我们可以获得 A 的对象) .
我不能简单地使用 A 的对象来委托 A 中的每个函数(因为 A 中有几个函数)
有没有其他方法可以获得具有上述限制的B级?
重要提示: A 类由其他人处理。我们不能改变它的任何部分。
【问题讨论】:
-
也许,反射是你唯一的选择。你确定不能委托这些方法吗?
-
你能更好地解释为什么“我不能简单地使用 A 的对象委托 A 中的每个函数(因为 A 中有几个函数)”?
-
A类可以是单例还是需要多重继承?
-
@bakero98 类 A 继承自包含多个方法的单个接口。 A类不需要是单例的
-
您的要求“......因此它隐藏了包装类的功能”与您想要为 A 的每个方法创建一个委托方法,甚至反映 A 的潜在变化的事实之间存在矛盾API。换句话说,你不是隐藏而是暴露 A 的每一个功能。你不能少封装。那么为什么不直接向
B添加一个返回A的方法就完成了。您的伪封装只会浪费开发工作而没有任何好处。
标签: java reflection wrapper delegation dynamic-proxy