委任パターンを使用して、ファクトリによって作成されたオブジェクトをサードパーティのライブラリにラップしています。最近、ライブラリで保護されたメソッドが基本クラスに追加され、ラッパー クラスが機能しなくなりました。リフレクションに頼らずに良い解決策を持っている人はいますか?
これはサードパーティのライブラリとそのパッケージにあります。
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
}
}
編集:私の元の投稿は明確ではありませんでした。これら 2 つのクラスは異なるパッケージに含まれています。
なぜ委任が必要なのかという質問に答えるために。これは Delegation/Wrapper パターンの典型的な使用例であり、ここでは数行のコードでは説明できません。ライブラリは Base クラスを公開しますが、ファクトリの実際のオブジェクトは Base の派生クラスです。実際のクラスは構成によって異なります。だから私はデリゲートが何であるかわかりません。したがって、ストレートな継承パターンはここでは機能しません。