2016-07-13 5 views
-1

クラスを持っているだけで、スカラでオブジェクトのシングルトンインスタンスを取得することは可能ですか?検討するスカラ:クラスからシングルトンオブジェクトを取得

object A {} 

def getSingletonInstance[T](x: Class[T]): Option[T] = { 
    // output the singleton, if x is a singleton class i.e. defined by an object 
    // is this possible? 
} 

getSingletonInstance(A.getClass) // --> should return Some[A] 
+0

実行時リフレクションでのみ。 – rightfold

+0

はい、原因はありますが、ランタイムリフレクションには十分な情報がありますか?そして私はこれをどのようにして行うのですか? –

+0

どうして 'get getSingletonInstance [T](x:Class [T]):オプション[T]'? –

答えて

1

これについては、さまざまな方法で議論しています。 私はあなたの質問にコメントで言及しました。ここ は「公式」Scalaの反射を利用して、別のいずれかになります。Get companion object instance with new Scala reflection API

あなたが(むしろ公式APIよりも、いくつかの一致/文書化されていない/非公式の機能を使用してのように)「ハッキング」少しを含む、アプローチを気にしない場合クラスTのコンパニオンオブジェクトはTのインスタンスである必要はありませんので、ごgetSingletonInstanceの宣言は常に動作しないこと

val clazz = Class.forName(x.getName + "$") 
val singleton = clazz.getField("MODULE$").get(clazz) 

注:、あなたはこのような何かをはるかに簡単にそれを行うことができます。

EDIT私はあなたがあなたの関数ではなく、コンパニオンクラスにオブジェクト自身のクラスを集めていることを認識していませんでした。その場合は、上記のコードにドル記号を付ける必要はなく、最初の行はまったく必要ありません。あなただけが行うことができますx.getField("MODULE$").get(x)

関連する問題