2017-06-29 56 views
0

如何在沒有實例的情況下在運行時反映案例類的成員?斯卡拉反映案例類申請方法運行時

例如,如果我有以下的情況下類:

package com.abc 

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

我會想,雖然我沒有你好的一個實例,以反映我能反映同伴對象申請方法和檢查參數的知道它有哪些成員?

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) 

但是,這返回「無」不是一種方法。所以它沒有應用方法?

回答

0

我得出以下結論。有沒有什麼方法可以使用Scala反射而不是Class.forName?

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