Вопрос по – обнаруживать внутренние объекты в объекте scala

7

Я хочу получить список внутренних объектов объекта 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?

Объекты O1 и O2 являются вложенными классами и не являются частьюOuter, Вам нужно получить доступ какOuter.O1.getClass.. Prince John Wesley
Спасибо за ваш ответ, но я хочу получить их в виде Списка в общем виде (не зная их имен раньше). Я ищу что-то вродеgetDeclaredMethods Метод в примере. dev-null

Ваш Ответ

2   ответа
1

объектO1 а такжеO2 являются вложенными классами и не являются частьюOuter Объект.

    println(Outer.O1.getClass.getName) //Outer$O1$
    println(Outer.getClass.getName)    //Outer$
    println(Outer.O2.getClass.getName) //Outer$O2$
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededgetDeclaredMethodsError: User Rate Limit Exceeded dev-null
7

С новой библиотекой отражений в Scala 2.10 (начиная с Milestone 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)
Error: User Rate Limit Exceeded dev-null

Похожие вопросы