進取の気性に富んだ Java プログラムでは、次のようなパターンがよく見られます。
public Something myMethod() throws MyException {
try {
// may throw checked DbException:
Connection c = openDataBase("connectionstring");
// ... other code throwing more checked exceptions ...
} catch(DbException e) {
throw new MyException(e);
}
return something;
}
...または、メソッドヘッダーで宣言されていない1つのチェック済み例外タイプを「キャスト」する他のメカニズム。多くの場合、この「try-catch-cast」ブロックは、そのようなクラスのすべてのメソッドに入れる必要があります。
例外をキャッチして変換するアノテーションをどのように実装するのだろうか?
using コードは次のようになります。
@ConvertException(MyException, DbException)
public Something myMethod() throws MyException {
// may throw checked DbException:
Connection c = openDataBase("connectionstring");
// ...
return something;
}
もちろん、MyException.class
または"MyException"
代わりに書く必要があるかもしれません。これらの注釈を連鎖させたり、変換する複数の例外をリストしたりすることも可能でなければなりません。
私の推測では、注釈は、元の関数を呼び出すキャッチ コード ブロックを含むラッパー関数を導入します。その場合、注釈にはコンパイル時保持のみが含まれます (実行時保持はありません)。
これを行うのが賢明だとは言いません。おそらく、これらの注釈がプログラムのセマンティクスを変更するためではありません。「ただ学ぶ」というのは学術的な問題かもしれません...