ここに私の問題は実際に直面しています。 私はクラスを持っています。Foo
としましょう。このクラスはgetBar
というメソッドを定義し、Bar
というインスタンスを返します。クラスBar
は、Foo
の内部に定義され、public static final
と宣言されています。私がしたいのは、Foo
を拡張するクラスMyFoo
を定義することですが、Bar
をMyBar
に拡張したいのは、独自の機能(メソッド、プロパティなど)を追加することです。 また、getBar
はMyBar
を返すようにします。Javaで最終クラスを拡張する方法
問題はBar
が最終です。ここで私は何をしたいのかの実例である:私は何をしたいか
public class Foo {
Bar bar = new Bar();
public Bar getBar(){
return bar;
}
....
public static final class Bar {
}
}
は次のとおりです。
public class MyFoo extends Foo {
public MyBar getBar(){ // here I want to return an instance of MyBar
}
public static final class MyBar extends Bar { // That's impossible since Bar is final
}
}
どのように私はそれを達成することができますか?
[編集]私は私の質問に詳細を追加しています。 実際にJenkins用のプラグインを開発していて、検索した後、私がやりたい基本機能、すなわちFoo
とBar
を提供するプラグインがあることに気付きました。私はカスタムFoo
とBar
にしたいので、私のニーズに合っています。 Fooはプラグインのメインクラスであり、Builderというクラスを拡張します。 Fooは、perform
というメソッドを定義しています。このメソッドには、ビルドを実行するためのすべての操作が含まれています。 Bar
には設定のための操作が含まれており、Fooにはこれらの情報を取得するためのBarが必要です。
私がしたいことは、MyFoo
でFooを拡張し、MyBar
でいくつかの設定を追加することです。そして、あなたが見るように、MyFoo
がgetBar();
を呼び出すことによって、これらのconfiguationsを取得する必要があります2つ目は、私が何ブロック私をMyFoo
とMyBar
のインスタンス化の制御することはできません、私はバーを拡張することができないということです。それをどうすれば実現できますか?
'final'修飾子は' Bar'をサブクラス化できないようにするため、 "wrapping"することをお勧めします。 – mre
'Bar'が' final class'である場合、通常は何らかの正当な理由があります。 'Foo'の不変量者の中にはそれが必要だからです。だから私はそれをやりません。少なくとも、関連するすべてのソースコードを正確に理解し、おそらくそれを書き直すべきです。 –
'Bar'の開発者に、最終的なものにするか、またはmre suggestsとして委任を使用するよう依頼してください。 –