8

我想获取一个 scala 对象的内部对象列表。示例代码:

object Outer {
  val v = "-"
  def d = "-"
  object O1
  object O2
}

object Main {
  def main(args: Array[String]) {
    Outer.getClass.getDeclaredMethods.map(_.getName) foreach println  // prints d and v
    // Outer.getClass.get ... Objects???
  }
}

我可以找到 v 和 d,但我怎样才能找到 O1 和 O2 呢?

4

2 回答 2

8

使用 Scala 2.10(自里程碑 4 起)中的新反射库,可以获得内部对象:

scala> import scala.reflect.runtime.{universe => u}
import scala.reflect.runtime.{universe=>u}

scala> val outer = u.typeOf[Outer.type]
outer: reflect.runtime.universe.Type = Outer.type

scala> val objects = outer.declarations.filter(_.isModule).toList
objects: List[reflect.runtime.universe.Symbol] = List(object O1, object O2)
于 2012-06-14T14:11:26.667 回答
1

ObjectO1O2是嵌套类,不是OuterObject 的一部分。

    println(Outer.O1.getClass.getName) //Outer$O1$
    println(Outer.getClass.getName)    //Outer$
    println(Outer.O2.getClass.getName) //Outer$O2$
于 2012-06-05T08:17:33.483 回答