Рассмотрим следующий код 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?
[spoiler] Это ClassCastException
; кто может объяснить, почему он не пойман и не заменен на IllegalArgumentException
?
PS: Чтобы упредить любые вопросы о том, почему я хотел бы это сделать: это упрощенная версия некоторого кода, который использует json4s для синтаксического анализа некоторой строки в Option[T]
; если не удалось выполнить синтаксический анализ None
, который является ОК, если T
был Unit
и не ОК, если T
- это другой тип.