1. ホーム
  2. java

[解決済み] なぜJavaはThrowableの一般的なサブクラスを許さないのですか?

2022-04-23 04:53:18

質問

によると Java言語区分 第3版

<ブロッククオート

の直接または間接のサブクラスである場合、コンパイル時のエラーとなります。 Throwable .

なぜこのような決定がなされたのか、理解したいものです。汎用的な例外の何がいけないのでしょうか?

(私の知る限り、ジェネリックは単なるコンパイル時の構文糖であり、翻訳されるのは Object の中で、とにかく .class ファイルであるため、ジェネリッククラスを効果的に宣言することは、あたかもそのクラス内のすべてが Object . 間違っていたらご指摘ください)

解決方法は?

マークが言ったように、型が再利用可能でないことが、以下の場合の問題点です。

try {
   doSomeStuff();
} catch (SomeException<Integer> e) {
   // ignore that
} catch (SomeException<String> e) {
   crashAndBurn()
}

両方 SomeException<Integer>SomeException<String> が同じ型に消された場合、JVMが例外インスタンスを区別する方法がなく、したがって、どちらの catch ブロックが実行されるべきです。