【问题标题】:Compiler error while converting java Exception code to scala using intercept : ''forward reference extends over definition of value exception'使用拦截将java异常代码转换为scala时出现编译器错误:''前向引用扩展了值异常的定义'
【发布时间】:2012-12-17 17:00:33
【问题描述】:

如何使用intercept将异常捕获代码从java转换为scala?

从阅读http://www.scalatest.org/getting_started_with_fun_suite 看来,似乎建议在捕获异常时使用拦截。在下面的异常捕获代码中,我需要访问 Exception 类型以便在 断言:

catch {
          case me : MyException => {
            assert(me.getDetail.getClass() === classOf[GenericException]);
          }
        }

这似乎不可能使用拦截,因为下面的代码会导致编译器错误:'前向引用扩展了值异常的定义'

这是转换为 scala 的 catch 块:

        val exception = intercept[MyException] {
assert(exception.getDetail.getClass() === classOf[GenericException]);   
    }

线上出现错误

assert(exception.getDetail.getClass() === classOf[GenericException]);

【问题讨论】:

    标签: scala scalatest


    【解决方案1】:

    你对exception 的定义是循环的。你想要的是:

    val exception = intercept[MyException] {
       <your exception-throwing code here>
    }
    
    assert(exception.getDetail.getClass() === classOf[GenericException])
    

    【讨论】:

    • 谢谢,那行得通。因为如果抛出异常就会执行代码,这是闭包还是其他阻塞名称?我从未见过以这种方式声明的 val
    • 不,这只是一种普通方法,花括号之间的代码块是参数。如果它是一个代码块,则可以省略参数周围的括号,这样您就可以使用这样的语法。如果您想进一步了解,请查看intercept 的来源。
    猜你喜欢
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多