在Scala中调用反射的case类构造函数,第2部分

时间:2015-03-10 23:05:38

标签: scala reflection

这个问题是对此问题的后续问题: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

0 个答案:

没有答案