考虑以下 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?
[剧透] 这是一个ClassCastException
; 谁能解释为什么它没有被捕获和替换IllegalArgumentException
?
PS:为了抢占我为什么要这样做的任何问题:这是一些代码的简化版本,它使用 json4s 将一些字符串解析为Option[T]
; 如果解析失败None
,则返回,如果是,则可以,如果T
是其他类型Unit
,则不可以。T