2017-06-29 8 views
0

インスタンスなしで、ケース・クラスのメンバーを実行時にどのように反映しますか?例えばScalaリフレクション・ケース・クラスApplyメソッド・ランタイム

私は次のような場合クラスがある場合:

package com.abc 

object Holder { 
    case class Hello(message:String,count:Int) 
} 

を私は反映するためのHelloのインスタンスを持っていないが、私はコンパニオンオブジェクトは、メソッドを適用反映しての引数を検査できると思っていたのでしょうそれが持っているメンバーについて知っていますか?

val mirror = ru.runtimeMirror(getClass.getClassLoader) 
val module = mirror.staticModule("com.abc.Holder$Hello") 
val instance = mirror.reflectModule(module).symbol.typeSignature.member(TermName("apply")).asMethod.paramLists 
instance.foreach(println) 

しかし、これは "none"を返すメソッドではありません。したがって、適用メソッドはありませんか?

答えて

0

以下の結論に至りました。 Class.forNameの代わりにScalaのリフレクションを使用する方法はありますか?

val mirror = ru.runtimeMirror(getClass.getClassLoader) 
val classSymbol = mirror.classSymbol(Class.forName("com.quantexa.anonymizer.FiuModel$Customer")) 
val classApply = classSymbol.companion.typeSignature.member(TermName("apply")).asMethod 

val members = classApply.paramLists.flatten.map(x => (x.asTerm.name,x.typeSignature)) 
関連する問題