3

a的runtimeClass方法ClassTag[T]返回 a Class[_]。我希望它返回 a Class[T],因为我们知道ClassTag[T]代表 的(运行时)类T

为什么它返回“任何” Class?这有根本原因吗?

4

1 回答 1

1

感谢 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[_]]

发布在 scala-internals 上

于 2015-02-12T22:56:27.203 回答