7

私はこのような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を使用しています

4

2 に答える 2

6

これは、2.9.1を使用してHeliosで再現できます。これはプレゼンテーションコンパイラのバグであり、http: //www.assembla.com/spaces/scala-ide/ticketsでバグとして報告する必要があります。

于 2012-04-26T14:59:39.377 に答える
2

今後の参考のために、この問題は修正されました(https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5)。この修正は、ScalaIDE2.0.xとHeliumnightliesの両方ですでに利用可能です。さらに、次のScalaIDE2.0.2メンテナンスリリースに含まれる予定です。

(追加のノイズについては申し訳ありませんが、単純なコメントよりも答えがある方が目立つことに気づきました)

于 2012-05-17T12:58:57.923 に答える