1

ドキュメント hereによると、継承ではなく、クラスで宣言されたものの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

その理由は、membersdeclarationsのみがオブジェクト メンバーを考慮に入れるためです。ただし、で宣言されているすべての関数java.lang.Systemは静的です。

scala の観点からは静的メンバーがないため、これは理にかなっています。静的メンバーに相当するものは、モジュールで定義されたメソッド/値です (objectの代わりに使用class)。したがって、scala-reflection は、Java クラスの静的メンバーがモジュールで定義されているかのように機能します。具体的には、Java クラスのコンパニオン オブジェクトで定義されます。(scala 定義のコンパニオン オブジェクトとは対照的に、これらの「java-companion-objects」は VM レベルには存在しないことに注意してください)。

私はスカラ リフレクションの専門家ではないので、静的メンバーを見つける方法を説明することはできません :-(

于 2013-09-10T21:03:19.347 に答える