a的runtimeClass方法ClassTag[T]返回 a Class[_]。我希望它返回 a Class[T],因为我们知道ClassTag[T]代表 的(运行时)类T。
为什么它返回“任何” Class?这有根本原因吗?
a的runtimeClass方法ClassTag[T]返回 a Class[_]。我希望它返回 a Class[T],因为我们知道ClassTag[T]代表 的(运行时)类T。
为什么它返回“任何” Class?这有根本原因吗?
感谢 Eugene Burmako(通过 scala-internals),我们有以下反例:
scala> classTag[Array[_]].runtimeClass
res0: Class[_] = class java.lang.Object
Array[T]在运行时不会擦除其类型参数(与其他泛型不同)。因此,不可能Array用准确的Class. 因此回退到Object.
有趣的是,同样的论点适用于classOf(正如@sjrd 提到的)的类型:
scala> classOf[Array[_]]
res0: Class[Array[_]] = class java.lang.Object
where 可以说class java.lang.Object不是 type Class[Array[_]]。