【发布时间】:2013-09-12 19:47:46
【问题描述】:
考虑以下 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 是其他类型则不可以。
【问题讨论】: