为什么scala反射报告没有针对某些类的声明?

时间:2013-09-10 20:26:15

标签: scala reflection scala-2.10

根据docs heredeclarations应该是members的子集,用于在类中声明的事物,而不是继承的。{1}}。那么为什么各种类都没有报告声明呢?

scala> import scala.reflect.runtime.universe._
scala> typeTag[java.lang.System].tpe.declarations
res5: reflect.runtime.universe.MemberScope = SynchronizedOps()

1 个答案:

答案 0 :(得分:3)

原因是membersdeclarations都只考虑了对象成员。但是,java.lang.System中声明的所有函数都是静态的。

这是有道理的,因为从scala的角度来看,没有静态成员。静态成员的等价物是模块中定义的方法/值(使用object而不是class)。因此,scala-reflection将像在模块中定义Java类的静态成员一样 - 更具体地说,在java类的伴随对象中定义。 (请注意,与scala定义的伴随对象相比,这些“java-companion-objects”在VM级别上不存在。)

我不是斯卡拉反射的专家,所以我不能告诉你如何找到静态成员: - (