19

次の 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

4

1 に答える 1