有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    我认为Groovy 2.6中也可能会修复这个问题,因为它们使用相同的Parrot解析器