为什么Groovy从多捕获块

时间:2015-11-18 21:06:36

标签: java groovy

我有以下使用org.codehaus.groovy:groovy-all:2.4.5 ...

静态编译的Groovy测试代码
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关键字将异常强制转换为异常类型来解决此问题,但如果可能的话,我想避免这种情况。

我在这里错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个错误,已经在Groovy 3.0 Alpha中修复过(我已经测试过)

我认为它也可以在Groovy 2.6中修复,因为它们使用相同的Parrot Parser。