以下は、コンパイルされないコードの一部です。
void multiCatch()
{
try {
throwIOFile();
}
// FileNotFoundException extends IOException, hence this
// does not compile ("alternatives" related by sub classing):
catch (IOException | FileNotFoundException e) { }
}
void throwIOFile() throws IOException, FileNotFoundException
{}
サブクラス化によって例外タイプが関連付けられていなければ、すべてが魅力のように機能します。IOException
私のコード スニペットの を say..に交換するとSQLException
、機能します。仕様書には次のように書かれています。
型の共用体に 2 つの選択肢 Di と Dj (i ≠ j) が含まれている場合、コンパイル時エラーになります。ここで、Di は Dj のサブタイプです。
この背後にある理論的根拠を理解できません。確かに、私の例の multi-catch は完全に冗長IOException
です。しかし、私のコード スニペットを合法化すると、どのような害が生じるでしょうか? 慣行が違法になるには、確かに害がなければなりませんか?