根据docs here,declarations
应该是members
的子集,用于在类中声明的事物,而不是继承的。{1}}。那么为什么各种类都没有报告声明呢?
scala> import scala.reflect.runtime.universe._
scala> typeTag[java.lang.System].tpe.declarations
res5: reflect.runtime.universe.MemberScope = SynchronizedOps()
答案 0 :(得分:3)
原因是members
和declarations
都只考虑了对象成员。但是,java.lang.System
中声明的所有函数都是静态的。
这是有道理的,因为从scala的角度来看,没有静态成员。静态成员的等价物是模块中定义的方法/值(使用object
而不是class
)。因此,scala-reflection将像在模块中定义Java类的静态成员一样 - 更具体地说,在java类的伴随对象中定义。 (请注意,与scala定义的伴随对象相比,这些“java-companion-objects”在VM级别上不存在。)
我不是斯卡拉反射的专家,所以我不能告诉你如何找到静态成员: - (