我有以下使用org.codehaus.groovy:groovy-all:2.4.5
...
import groovy.transform.CompileStatic
import org.junit.Test
import javax.ws.rs.BadRequestException
@CompileStatic
public class GroovySandbox
{
@Test
public void multiCatchClassCastException()
{
try
{
throw new ArithmeticException( "message" );
}
catch ( ArithmeticException | BadRequestException e )
{
System.out.println( e.getMessage() );
}
}
}
当我运行测试时,我得到一个ClassCastException ...
java.lang.ClassCastException: java.lang.ArithmeticException cannot be cast to javax.ws.rs.BadRequestException
如果我从Java测试文件中运行完全相同的代码,那么测试就可以了。
如果我在try块中抛出BadRequestException,我可以在不获取ClassCastException的情况下调用getMessage()。多捕获块中列出异常类型的顺序似乎很重要。
我可以通过使用as
关键字将异常强制转换为异常类型来解决此问题,但如果可能的话,我想避免这种情况。
我在这里错过了什么吗?
谢谢!
答案 0 :(得分:2)
这是一个错误,已经在Groovy 3.0 Alpha中修复过(我已经测试过)
我认为它也可以在Groovy 2.6中修复,因为它们使用相同的Parrot Parser。