这个问题是对此问题的后续问题:Invoking Case Class Constructor
我选择的答案很有效 - 除了一些涉及价值类的案例。在这些情况下,我尝试这样的代码:
// cc.ctor is an reflected MethodMirror as described in linked question.
println(s"::: Poof: ${cc.name} with "+args.toList)
println("--- Ctor : "+cc.ctor)
println("--- Args : "+args.toList.map(_.getClass.getName))
println("--- Tried: "+scala.util.Try( cc.ctor.apply(args:_*) ))
所涉及的对象如下。包裹是正在构建的对象。
case class Wrapped( hey:Wrapper, you:String )
class Wrapper(val underlying: String) extends AnyVal
这是我得到的输出:
::: Poof: co.blocke.scalajack.test.v4.Wrapped with List(co.blocke.scalajack.test.v4.Wrapper@18cc6, greg)
--- Ctor : constructor mirror for def <init>(hey: co.blocke.scalajack.test.v4.Wrapper,you: String): co.blocke.scalajack.test.v4.Wrapped (bound to null)
--- Args : List(co.blocke.scalajack.test.v4.Wrapper, java.lang.String)
--- Tried: Success(Wrapped(co.blocke.scalajack.test.v4.Wrapper@18cc6,null))
太靠近了!你可以在最后一行看到Wrapped对象,包括它的成员值类,是“成功”创建的,但是我的String在哪里?构造函数需要一个。我在args中传了一个,但是我的对象中有一个很大的胖子。发生了什么事?
在此处添加要点以演示问题:See Code