runtimeClass
的{{1}}方法返回ClassTag[T]
。我希望它返回Class[_]
,因为我们知道Class[T]
代表ClassTag[T]
的(运行时)类。
为什么它会回归"任何" T
?有这个根本原因吗?
答案 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[_]]
类型。