2012-12-17 38 views
1

如何异常捕获的代码与Java使用拦截转换为Scala的向前参考超值异常的定义扩展”?编译器错误,而Java异常代码转换为使用拦截阶:'

从阅读http://www.scalatest.org/getting_started_with_fun_suite它似乎被推荐捕获异常时要使用拦截。在异常捕获代码下面我需要访问异常类型,以便在 断言内,以检查它的类型:

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

这似乎并不使用拦截如下代码会导致一个编译器错误是可能的:“前进参考值以上的异常”

在这里的定义延伸在转换为阶catch块:

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

上线上发生错误

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

回答

1

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

val exception = intercept[MyException] { 
    <your exception-throwing code here> 
} 

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

感谢,这工作。因为如果抛出异常,代码正在执行,这是一个闭包还是其他一些阻塞名称?我从来没有见过以这种方式声明的val – user701254

+0

不,这只是一个正常的方法,其中大括号之间的代码块是参数。参数周围的Parens可以省略,如果它是一个代码块,它允许你这样的好语法。如果您想进一步了解,请查看“拦截”的来源。 –