リフレクションを使用してオブジェクトを作成しています。構築されている実際のオブジェクトによっては、コンストラクターが特定のカスタム例外のthrows宣言を持っている場合があり、これをキャッチできることが重要です。
残念ながら、リフレクティブ構造を含むtryブロックのキャッチに例外を追加しようとすると、次の理由でコードがコンパイルされません。
「到達不能なcatchブロック。この例外はtryステートメント本体からスローされることはありません。」
基本クラスのExceptionをキャッチすることは機能することを理解しており、実際、私のコードでは問題ありません。ただし、将来的に他のオブジェクトに他の異なる例外が適用される可能性があり、catch内でinstanceofを使用し、他のすべてを再スローすることはエレガントではないように思われるため、常にそうであるとは限りません。
この例外がスローされる可能性があることを通知して、具体的にキャッチできるようにする方法はありますか?
編集:要求に応じていくつかのコード。上記の理由でコンパイルされません。
try{
Constructor<? extends Thing> constructor = getClassType().getDeclaredConstructor(SomeParameter.class);
Thing thing = constructor.newInstance(new SomeParameter());
}
catch(FoobarException e){
//new Thing(SomeParameter p) might throw this
}
catch(ReflectiveOperationException | IllegalArgumentException | SecurityException e){}