假设我有:
val number:AnyVal
我知道x可以是任何数字(对于我们的目的,一个Float,Double,Int,Long).
将这样的数字转换为Long的最简单方法是什么:
val l = number.toLong //fails for AnyVal
解决方法
怎么样:
scala> import scala.util.Try import scala.util.Try scala> val i1: Int = 23 i1: Int = 23 scala> val l1: Long = 42 l1: Long = 42 scala> val f1: Float = 14.9f f1: Float = 14.9 scala> val d1: Double = 14.96 d1: Double = 14.96 scala> val b1: Boolean = true b1: Boolean = true scala> List(i1,l1,f1,d1,b1) map (x => Try(x.asInstanceOf[Number].longValue)) foreach (println(_)) Success(23) Success(42) Success(14) Success(14) Failure(java.lang.classCastException: java.lang.Boolean cannot be cast to java.lang.Number) scala> List(i1,b1) map (x => Try(x.asInstanceOf[Number].longValue)) foreach (n => println(n.get)) 23 42 14 14 java.lang.classCastException: java.lang.Boolean cannot be cast to java.lang.Number at $anonfun$1$$anonfun$apply$1.apply$mcJ$sp(<console>:14) at $anonfun$1$$anonfun$apply$1.apply(<console>:14) at $anonfun$1$$anonfun$apply$1.apply(<console>:14) at scala.util.Try$.apply(Try.scala:161) at $anonfun$1.apply(<console>:14) at $anonfun$1.apply(<console>:14) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244) at scala.collection.immutable.List.foreach(List.scala:318) at scala.collection.TraversableLike$class.map(TraversableLike.scala:244) at scala.collection.AbstractTraversable.map(Traversable.scala:105) at .<init>(<console>:14)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。