在scala中使用多个构造函数从类型创建实例

时间:2017-06-16 03:56:16

标签: scala reflection

我有一个用2个构造函数创建的类。

我想仅使用默认构造函数创建此类的实例。

class A (arg1:Int,Arg2:String){
   def this(arg1:Int){
      this(arg1,"hello")
   }
}

这是我尝试做的事情:

val tpe = ru.typeOf[A]
val mirror = ru.runtimeMirror(getClass.getClassLoader)
val clsSym = tpe.typeSymbol.asClass
val clsMirror = mirror.reflectClass(clsSym)
val ctorSym = tpe.decl(ru.termNames.CONSTRUCTOR).asMethod
val method = clsMirror.reflectConstructor(ctorSym)
val newInstance = method(args:_*)

我收到以下错误:

constructor ExampleWithCamelCase encapsulates multiple overloaded
alternatives and cannot be treated as a method. Consider invoking 
<offending symbol>.asTerm.alternatives` and manually picking the required method

是否可以选择默认构造函数?

1 个答案:

答案 0 :(得分:1)

classOf[A].getConstructors()(1).newInstance(1)

您只需使用 Java 反映到newInstance即可启动多个构造函数