我一直在使用委托模式将工厂创建的对象包装在第三方库中。最近,该库在基类中添加了受保护的方法,而我的包装类不再起作用。有没有人有一个好的解决方案而不诉诸反思?
这是在第 3 方库及其包中,
public class Base {
public void foo();
protected void bar(); // Newly added
}
这是我自己的包里的
public class MyWrapper extends Base {
private Base delegate;
public MyWrapper(Base delegate) {
this.delegate = delegate;
}
public void foo() {
delegate.foo()
}
protected void bar() {
// Don't know what to do
}
}
编辑:我原来的帖子不清楚。这两个类位于不同的包中。
回答为什么我需要授权的问题。这是委托/包装模式的典型用例,我无法用几行代码在这里展示它。该库公开了 Base 类,但来自其工厂的实际对象是 Base 的派生类。实际的类根据配置而变化。所以我不知道代表是什么。因此直接继承模式在这里不起作用。
Access Levels
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
protected
has package
也可以访问,您是否看到任何具体问题:
class Base {
public void foo(){};
protected void bar(){}; // Newly added
}
class MyWrapper {
private Base delegate;
public MyWrapper(Base delegate) {
this.delegate = delegate;
}
public void foo() {
delegate.foo();
}
protected void bar() {
// Don't know what to do
delegate.bar(); //since its in same package, it can be referenced, do you expect compile time error?
}
}
此外,在使用委托模式时,为什么包装类会扩展Base
类,我没有看到具体的需要,因为你已经有一个实例Base
。对我来说,它更像是一个装饰器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)