我有一些像这样的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中编译为你的类型时显而易见,这表明该错误存在于Eclipse Java编译器或IDE的某些部分中。其他人可以这样重现吗?我正在使用Eclipse 3.7.2
答案 0 :(得分:6)
我可以使用2.9.1在Helios上重现这一点。这是演示编译器中的一个错误,您应该将其作为http://www.assembla.com/spaces/scala-ide/tickets上的错误提出。
答案 1 :(得分:2)
为了将来参考,此问题已得到修复(https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5)。该修复程序已同时适用于Scala IDE 2.0.x and Helium nightlies。 此外,它将包含在下一个Scala IDE 2.0.2维护版本中。
(抱歉有额外的噪音,但我意识到答案比简单评论更明显)