一つ前のエントリの続き
次はcase classではなく、普通のクラスを生成する
import scala.reflect.runtime.{universe => ru} import ru._ class Person(val name: String) object ReflectionTest { def main(args: Array[String]): Unit = { def generate[T](implicit tag: TypeTag[T]): T = { val typeSymbol = typeOf[T].typeSymbol // 型のSymbolを得る val constructorSymbol = typeSymbol.asClass.typeSignature.decl(termNames.CONSTRUCTOR).asMethod // コンストラクタ val mirror = scala.reflect.runtime.currentMirror // 現在のミラーを取得する val cm = mirror.reflectClass(typeSymbol.asClass) // Class Mirrorを得る val constrcutorMirror = cm.reflectConstructor(constructorSymbol) constrcutorMirror("John").asInstanceOf[T] // 実行する } println(generate[Person].name) // 生成したオブジェクトが得られる } }