繁体   English   中英

不了解ClassTag和数组创建

[英]Don't understand ClassTag and Array Creation

ClassTag仅保留类型参数的顶级类型,即给定以下类型: Seq[List[Int]] ,类型参数为List[Int] ,但仅保留ListInt丢失

def mkArray[T: ClassTag](data: T*) = Array(data: _*)
val data = Seq(List(1), List(2), List(3))
val arr = mkArray(data)

在调用mkArray创建数组时,应该丢失Int for List[Int] ,因此为什么创建的数组具有其元素的正确类型,即List [Int]

底层Java数组在运行时知道其元素的擦除类型。 编译器知道编译时的准确时间。

scala> val xs = Array(List(1))
xs: Array[List[Int]] = Array(List(1))

scala> xs.getClass.getComponentType
res0: Class[_] = class scala.collection.immutable.List

scala> val vs = xs.asInstanceOf[Array[List[String]]]
vs: Array[List[String]] = Array(List(1))

scala> vs(0) = List("hi")

scala> xs
res2: Array[List[Int]] = Array(List(hi))

该信息会在运行时从类型擦除中丢失,但不会在编译时丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM