[英]@throws in Scala does not allow calling Java to catch correct exception type
I have some Scala code like this: 我有一些像这样的Scala代码:
class Callee {
@throws(classOf[MyCheckedException])
def doStuff() {
}
}
Calling it from Java like so: 像这样从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) {
}
}
}
Removing the catch block results in an error from the Java compiler saying 'unhandled exception type MyCheckedException'. 删除catch块会导致Java编译器发出错误,指出“未处理的异常类型MyCheckedException”。 Adding the catch block for MyCheckedException results in the compiler complaining about the catch block being unreachable, because the exception is never thrown.
为MyCheckedException添加catch块导致编译器抱怨catch块无法访问,因为永远不会抛出异常。
If I catch Exception and do an instanceOf, I can trap the correct exception coming out of doStuff, but I thought the @throws annotation was supposed to generate the right bytecode for the proper catch block to work. 如果我捕获Exception并执行一个instanceOf,我可以捕获来自doStuff的正确异常,但我认为@throws注释应该生成正确的字节码以使正确的catch块工作。 Am I wrong, or is there a bug here?
我错了,或者这里有错误?
For the record, this is with Scala 2.9.2 and Java 1.6. 对于记录,这是使用Scala 2.9.2和Java 1.6。
Edit: It compiles fine invoking javac/scalac using sbt from the command line. 编辑:它使用命令行中的sbt编译精细调用javac / scalac。 The error is only apparent during compile-as-you-type in Eclipse, which suggests the bug is in either the Eclipse Java Compiler or some part of the IDE.
这个错误只在Eclipse中编译为你的类型时显而易见,这表明该错误存在于Eclipse Java编译器或IDE的某些部分中。 Can others reproduce it this way?
其他人可以这样重现吗? I am using Eclipse 3.7.2
我正在使用Eclipse 3.7.2
I can reproduce this on Helios with 2.9.1. 我可以使用2.9.1在Helios上重现这一点。 It is a bug in the presentation compiler, and you should raise it as a bug on http://www.assembla.com/spaces/scala-ide/tickets .
这是演示编译器中的一个错误,您应该将其作为http://www.assembla.com/spaces/scala-ide/tickets上的错误提出。
For future reference, this issue has been fixed (https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5). 为了将来参考,此问题已得到修复(https://github.com/scala-ide/scala-ide/commit/055a81cd3fe792e4327668791888c30cf04793f5)。 The fix is already available with both Scala IDE 2.0.x and Helium nightlies .
Scala IDE 2.0.x和Helium nightlies已经提供了此修复程序。 Furthermore, it will be included in the next Scala IDE 2.0.2 maintenace release.
此外,它还将包含在下一个Scala IDE 2.0.2维护版本中。
(sorry for the additional noise, but I realized that having an answer was more visible than a simple comment) (对不起额外的噪音,但我意识到答案比简单的评论更明显)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.