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