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[_]]
。