为什么ClassTag的方法runtimeClass返回一个通配符类?

时间:2015-02-12 00:37:14

标签: scala reflection scala-reflect

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

为什么它会回归"任何" T?有这个根本原因吗?

1 个答案:

答案 0 :(得分:0)

感谢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

可论证class java.lang.Object不属于Class[Array[_]]类型。

Post on scala-internals