次のようなJavaクラス階層について考えてみます。
abstract class Exp { public void generate(); }
class EffExp extends Exp {...}
clas PureExp extends Exp {...}
class NewExp extends EffExp {...}
etc, etc.
generate
Insideの実装は、NewExp
をスローするように変更されましたIOException
。
public void generate() throws IOException {...}
の他の実装はIOをgenerate
実行しないため、IOをスローする必要はありません。コンパイラは文句を言い、例外をスローするためにクラス階層内のすべてのメソッドを宣言するように強制します。これは本当に前進する唯一の方法ですか?かなり煩わしいようです。
もちろん、内部でそれが発生する例外をキャッチすることはできますが、それNewExp
は実際には意味がありません。例外は最上位に伝播し、プログラムの実行を停止する必要があります。
ここでのより一般的な質問は、相互にオーバーライドするメソッドの階層がある場合、同じ例外のセットをスローするようにすべてを宣言する必要があるかどうかです。