2012-06-05 7 views
6

スカラオブジェクトの内部オブジェクトのリストを取得したいとします。サンプルコード:スカラオブジェクト内のオブジェクトを検出

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を見つけることができますか?

+0

オブジェクトO1及びO2は、ネストされたクラスであると '外側の一部ではありません'。あなたは 'Outer.O1.getClass..'のようにアクセスする必要があります。 –

+0

あなたの答えをありがとうが、私は一般的な方法(前に名前を知らずに)としてそれらをリストとして取得することを望んでいません。私はこの例の 'getDeclaredMethods'メソッドのようなsomithingを探しています。 –

答えて

6

それは内部オブジェクトを取得することが可能である:

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) 
+0

これはまさに私が探していたものです! –

1

オブジェクトO1およびO2はネストされたクラスであり、Outerオブジェクトの一部ではありません。

(マイルストーン4以降)Scalaの2.10で新しい反射ライブラリと
println(Outer.O1.getClass.getName) //Outer$O1$ 
    println(Outer.getClass.getName) //Outer$ 
    println(Outer.O2.getClass.getName) //Outer$O2$ 
+2

あなたの答えをありがとう、しかし、私は一般的な方法(それらの名前を知らないで)リストとしてそれらを取得するwan't。私はこの例の 'getDeclaredMethods'メソッドのようなsomithingを探しています。 –

+0

それはできません。ネストされたObject/classは、囲むオブジェクトの一部ではありません。 –

関連する問題