java为什么Groovy从multicatch块抛出ClassCastException
我有下面的Groovy测试代码,它是使用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,我就能够调用getMessage(),而不会得到ClassCastException。异常类型在multi-catch块中列出的顺序似乎很重要
我可以通过使用as
关键字将异常强制转换为异常类型来解决这个问题,但是如果可能的话,我希望避免这种情况
我是不是遗漏了什么
谢谢
# 1 楼答案
这是一个bug,已经在Groovy 3.0 Alpha中修复(我已经测试过)
我认为Groovy 2.6中也可能会修复这个问题,因为它们使用相同的Parrot解析器