请考虑以下Scala代码:
case class Data[T](value: Option[T]) {
def get: T = try {
doGet
} catch {
case e: Exception => throw new IllegalArgumentException
}
def doGet: T = value match {
case Some(v) => v
case None => ().asInstanceOf[T]
}
}
Data[Unit](None).get
Data[Integer](None).get // which exception is thrown here?
Run Code Online (Sandbox Code Playgroud)
[剧透]这是一个ClassCastException; 谁能解释为什么它没被捕获并被一个IllegalArgumentException?
PS:要抢占任何关于我为什么要这样做的问题:这是一些代码的简化版本,它使用json4s将一些字符串解析成一个Option[T]; 如果解析失败None则返回,如果T是Unit,那就没关系,如果T是其他类型则不行.