次の 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
は OK が返され、他のタイプの場合はOKT
ではUnit
ありません。T