elm*_*elm 5 casting scala type-conversion
转换true: Boolean为String的一种方法是
scala> true.toString
res: String = true
Run Code Online (Sandbox Code Playgroud)
然而,
scala> true.asInstanceOf[String]
java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)
为什么后者尝试失败?
非常感谢
这是因为Boolean它不是子类型String或类型兼容String
scala> val a: Any = "Hello"
a: Any = Hello
scala> val b = a.asInstanceOf[String]
b: String = Hello
scala> val c: Char = 123
c: Char = {
scala> val d = c.asInstanceOf[Int]
d: Int = 123
scala> (123).asInstanceOf[Double]
res0: Double = 123.0
scala> (1.3).asInstanceOf[Int]
res1: Int = 1
Run Code Online (Sandbox Code Playgroud)
如您所见,我可以轻松地来回转换任何类型的兼容类型,在这种情况下,数字(包括字符)是交叉兼容的.所有类型都兼容Any,因为Any只保存任意对象引用,所以只要你使用正确的类型"unbox",你就是金色的.
scala> val arr = Array("Hello", 245, true)
arr: Array[Any] = Array(Hello, 245, true)
scala> val first = arr(0).asInstanceOf[String]
first: String = Hello
scala> val second = arr(1).asInstanceOf[Int]
second: Int = 245
scala> val third = arr(2).asInstanceOf[Boolean]
third: Boolean = true
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,只要您对拆箱方式小心,就不会出现任何错误.这是在将泛型引入语言之前用Java编写的.也就是说,如果你将任何一个数组元素强制转换为错误的类型,你将获得强制转换异常.
该.toString方法与类型转换不同,因为它根本不是转换,它存在作为将任何对象转换为其自身的字符串表示的简洁方式.
scala> val a = List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)
scala> a.toString
res0: String = List(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
这样做是为了在必要时可以打印任何类型,并且与铸造无关.
| 归档时间: |
|
| 查看次数: |
6767 次 |
| 最近记录: |