【发布时间】:2011-09-01 11:20:51
【问题描述】:
大家好,
我在scala中不能调用java的classname.class方法,但是scala保证我可以调用scala中的任何java方法,所以为什么我不能调用ClassName.class方法
张杰
【问题讨论】:
标签: scala
大家好,
我在scala中不能调用java的classname.class方法,但是scala保证我可以调用scala中的任何java方法,所以为什么我不能调用ClassName.class方法
张杰
【问题讨论】:
标签: scala
T.class 实际上不是方法或字段,而是一种特殊形式,它指示 Java 编译器您指的是类的运行时表示。 Scala 中等价的特殊形式是 classOf[T]。
您的主题提出了一个不同的问题,即您是否可以为任何对象调用 .getClass()。答案是肯定的,但它做了一些不同的事情——对于一个给定的类 T 实例,它给你 T。所以虽然最后你仍然得到运行时表示 T,但起点是不同的—— -- T 的一个实例,而不是代表 T 本身的名称/符号。
要将这些想法放在一起,请注意 T.class.getClass()(或 Scala 中的 classOf[T].getClass)将始终为您提供任何 T 的 java.lang.Class 的运行时表示。有趣的是,这是java.lang.Class 的运行时表示,以及 java.lang.Class 本身的一个实例,因为与某些语言不同,Java 没有元类。
【讨论】:
对于A 类,只需使用classOf[A] 来获取类对象。
【讨论】: