1

根据此处的文档declarations应该是members类中声明的事物的子集,而不是继承。那为什么各种类都没有声明呢?

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

1 回答 1

3

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

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

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

于 2013-09-10T21:03:19.347 回答