3

コンテクスト:

私は抽象クラスを持ってSuperClassいます。これにはかなりの数のサブクラスがあり、それぞれが異なるビジネスオブジェクトで動作しますが、同じように機能します。

確かにその場所を持っているがSuperClass、スーパークラスメソッドで取得する必要があるサブクラス固有の属性に依存するいくつかの新しい機能を追加する必要があります。ここでの明らかな方法はSuperClass、属性に抽象ゲッターを追加し、呼び出されたときに正しい属性を送信できるように、すべてのサブクラスにオーバーライドさせることです。

キャッチは次のとおりです。リグレッションの恐れがあるため、作業中のサブクラス以外のサブクラスのコードを変更することは許可されていません

したがって、他のサブクラスはもうコンパイルされないため、抽象メソッドを追加することはできません。

現在作業しているオブジェクトのみがこの新しい機能を必要とするため、で標準の非抽象メソッドを宣言して、そこSuperClassに戻ることができnullます。次に、作業中のサブクラスでオーバーライドし、無効にします。

質問:

Javadocで私の警告を正しく読まない人が、この新しいメソッドを別のサブクラスから呼び出そうとすると、ゲッターが適切にオーバーライドされないため、予期しない結果が発生します。nullで(そして予期しない結果を)返すのではなくSuperClass、例外をスローする方が、私の仲間のプログラマーにとってよりエレガントで便利だと思います。

カスタムメイドの例外を定義することはできますが、「標準」の例外に沿ったもの、YouForgotToImplementSomethingExceptionまたはPleaseReadTheJavadocException「標準」の例外に存在するものはありますか?

編集:

答えで提案されているようにを投げるErrorことは私がとても好きなことではありませんが、おそらくここでコンパイラの動作をエミュレートすることは理にかなっていますか?これについての考え?

4

2 に答える 2

8

これにUnsupportedOperationExceptionを使用しているライブラリを見たことがあります。

要求された操作がサポートされていないことを示すためにスローされます。

于 2013-03-11T10:27:43.023 に答える
-2

正確なのはjava.lang.AbstractMethodErrorです。

于 2013-03-11T10:30:17.893 に答える