私はこのようなScalaコードを持っています:
class Callee {
@throws(classOf[MyCheckedException])
def doStuff() {
}
}
次のようにJavaから呼び出します。
public class Caller {
public static void main(String[] args) {
// this won't compile; the Java compiler complains that the catch block is unreachable
// however without the catch block, it complains "unhandled exception MyCheckedException"
try {
new Callee().doStuff();
}
catch (MyCheckedException e) {
}
}
}
catchブロックを削除すると、Javaコンパイラから「未処理の例外タイプMyCheckedException」というエラーが発生します。MyCheckedExceptionのcatchブロックを追加すると、例外がスローされないため、コンパイラはcatchブロックに到達できないことについて不平を言います。
ExceptionをキャッチしてinstanceOfを実行すると、doStuffから発生する正しい例外をトラップできますが、@ throwsアノテーションは、適切なcatchブロックが機能するための正しいバイトコードを生成するはずだと思いました。私は間違っていますか、それともここにバグがありますか?
ちなみに、これはScala2.9.2とJava1.6の場合です。
編集:コマンドラインからsbtを使用してjavac/scalacを呼び出して正常にコンパイルします。このエラーは、Eclipseでの「入力時にコンパイル」中にのみ明らかになります。これは、バグがEclipseJavaコンパイラーまたはIDEの一部にあることを示しています。他の人はそれをこのように再現できますか?Eclipse3.7.2を使用しています