我有一些这样的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 块工作。我错了,还是这里有错误?
作为记录,这是使用 Scala 2.9.2 和 Java 1.6。
编辑:它使用 sbt 从命令行编译调用 javac/scalac。该错误仅在 Eclipse 中的 compile-as-you-type 期间很明显,这表明该错误存在于 Eclipse Java 编译器或 IDE 的某些部分中。其他人可以这样复制吗?我正在使用 Eclipse 3.7.2