如何将Scala方法参数限制为classOf [Exception]或classOf [Exception的子类型]

时间:2012-03-21 20:53:50

标签: scala exception types

如何声明expectedException以便只传递异常和子类?目前我正在使用expectedException: Any

详情

我有一个像这样调用的测试实用程序方法,

assertExceptionThrown("En-passant should be rejected when the previous move was not a double advance", classOf[UnreachablePositionException] ) {
  e.rejectIllegalMove(EnPassant("e5", "d6"))
}

第一个参数列表的第二个参数是classOf [SomeException]。这是测试方法的签名,

  // TODO: Restrict expectedException to Exception or subclass
  def assertExceptionThrown(assertion: String, expectedException: Any)(b:  => Unit) {

我的问题是如何声明expectedException以便只传递异常和子类?目前我正在使用expectedException:Any。

测试特性的完整来源在这里, https://github.com/janekdb/stair-chess/blob/master/src/test/Test.scala

1 个答案:

答案 0 :(得分:10)

使用泛型:

def assertExceptionThrown[T <: SomeException](assertion: String, expectedException: Class[T])(b:  => Unit)

这表示来自T的{​​{1}}类型必须是expectedException或其子类。

示范:

SomeException