匿名内部クラスを使用してコードを実行するときに、例外の透明度をJavaで取得するベストプラクティス方法は何ですか。匿名内部クラスからのチェック例外のスロー
私が実際のコードで見た頻繁なパターンは、いくつかのコードに対していくつかのコンテキストを指定するために、いくつかの擬似Runnable型インターフェイスを使用しています。 JDKで考えることができる最良の例は、java.security.PrivilegedExceptionActionです。
try {
boolean success = AccessController.doPrivileged(
new PrivilegedExceptionAction<Boolean>() {
@Override
public Boolean run() throws Exception {
// do something
// read file
FileInputStream fileInputStream =
new FileInputStream(new File("someFile"));
return true;
}
}
);
} catch (PrivilegedActionException e) {
if (e.getCause() instanceof FileNotFoundException) {
// handle IO exception
} else {
// impossible no other checked exception
}
}
にもかかわらずコードあなたは明確に、内のコードだけで見つからないファイルを投げる見ることができますが、呼び出し側は、例外が実際にスローされているものを認識していないとして、我々はチェック例外の利益を失ったを読んで。一般的なバグは、新しい例外をスローする匿名の内部クラスにコードを導入することであり、コードはその例外を処理するよう強制しません。
私が欲しいのは、以下のようなものです。このタイプの動作は言語の変更なしに達成可能ですか?
public interface PrivilegedExceptionAction<T,V... extends Throwable>
{
public T run() throws V;
}
匿名の内部クラスは、主に再利用や拡張ができないため、一般的には悪い考えです。しかしこれもまた別の理由です。私はどんな答えにも興味があります。 – user949300
http://blogs.sun.com/briangoetz/entry/exception_transparency_in_javaを見てください – alexsmail
私はプロジェクトlambdaの下でブライアンの提案を見ましたが、残念ながらこれはjava 6で利用できません – bluphoenix