在Scala中调用反射的case类构造函数

时间:2015-02-24 00:27:50

标签: scala reflection

我可以通过静态反射得到case类的默认构造函数:

val symbol = currentMirror.classSymbol(myObj.getClass).typeSignature.typeSymbol.asClass
val ctor = symbol.primaryConstructor

从这里我可以做一些漂亮的事情,比如它的字段的内省细节等等。但是我现在如何调用构造函数方法呢?我可以深入研究myObj的类,但如果它有多个构造函数,是否有一种直接的方法可以将正确的构造函数与我从primaryConstructor获得的构造函数进行匹配?

1 个答案:

答案 0 :(得分:3)

您可以在类镜像上使用reflectConstructor方法:

val classMirror = currentMirror.reflectClass(typeOf[Foo].typeSymbol.asClass)
classMirror.reflectConstructor(ctor.asMethod).apply(2, "bar").asInstanceOf[Foo]