メソッドのスローがそのシグネチャの一部になっているのはなぜですか?それを含めるのは奇妙に思えます。ここにはそれが途中である例があります。なぜメソッドシグネチャの一部がスローされる
@Overide
public void foo() {
throw new UnsupportedOperationException();
}
外部からこの方法を見たい場合は、サポートされていないことを知らずに使用する可能性があります。彼らはコードを実行しようとしたときにのみそれを学ぶだろう。
しかし、もしこのようなことができるのであれば、サポートされていないメソッドを見て、UnsupportedOperationExceptionがRuntimeExceptionを拡張していないとコンパイルエラーが発生することが分かります。 EDIT1:スローが署名の一部であるためオーバーライドが機能しないため、これは不可能です。
@Overide
public void foo() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
この質問はによって低下し、それに答えるように私はそれで働く人々の一つせずに答えるのは難しいかもしれないことを知っているJavasの設計に関する、私は多分この質問は、それらに頼まれていることを期待していましたこれをなぜこのようにして理由を説明するのか明らかな理由があるかもしれません。
ここにあなた自身の質問に答えているようですか?今あなた(そしてコンパイラ)はコードが例外をスローして処理する必要があることを知っています。 – Erik
未チェックの例外および例外がスローされる条件は、javadocで文書化する必要があります。このパラダイムは、組み込みのJavaライブラリで使用され、複数の書籍で提案されています(例:名前を付けるのに有効なJava。 正しく記されているように、署名で宣言することは、コンパイラによって要求されていません。 – Danstahr
あなたが質問しているのは、チェックされていない例外をスローするかどうかです。あなたのメソッドを開始するには、契約に従うべきであることを示す '@Override'を使います(抽象またはインタフェース)が、チェックされていない例外の場合はそうする必要はありません。 @danstahrが言及しているように、あなたがそれを投げることを選択したかどうかにかかわらず、必ずしも良いプラトスに従っているわけではありません。javadocに追加してください。 –