【发布时间】:2014-08-10 03:44:05
【问题描述】:
尝试将String 转换为Double 显然会失败:
scala> Try("abc".asInstanceOf[Double])
res11: scala.util.Try[Double] = Failure(java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double)
但是,如果我将上述定义为一个函数:
scala> def convertAsTypeOf[T](anyValue: Any): Try[T] = Try(anyValue.asInstanceOf[T])
convertAsTypeOf: [T](anyValue: Any)scala.util.Try[T]
奇怪的是,当我尝试将 String 转换为 Double 时,它会返回 Success:
scala> convertAsTypeOf[Double]("abc")
res10: scala.util.Try[Double] = Success(abc)
如果我尝试从 Success 中获取值,则会收到以下异常:
scala> convertAsTypeOf[Double]("abc").get
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Double
at scala.runtime.BoxesRunTime.unboxToDouble(BoxesRunTime.java:119)
为什么会这样?有没有办法解决这个问题并在泛型函数中生成asInstanceOf[T]?
【问题讨论】:
-
有人应该在用例中提及
import shapeless.syntax.typeable._ ; "abc".cast[Double]。