动态地在scala中创建case类的新实例



给定对case类伴侣对象t的引用和参数序列seq,我如何调用case类的新实例?

我可以创建一个类,当我自己输入参数的编号。

scala> case class B(n:String,a:Int,b:Int)
defined class B
scala> val t:AnyRef = B
t: AnyRef = B
scala> val m = t.getClass.getMethods.filter{m => m.getName == "apply"}.
    filterNot {_.getReturnType.getName == "java.lang.Object"}(0)
m: java.lang.reflect.Method = public B B$.apply(java.lang.String,int,int)
scala> m.invoke(t,"name",1:java.lang.Integer,2:java.lang.Integer)
res99: Object = B(name,1,2)

我无法解决的问题是调用调用的一系列参数,如Seq("name",1:java.lang.Integer,2:java.lang.Integer)。任何帮助如何做到这一点是非常感激的。

我自己发现的(分别在这里看到https://stackoverflow.com/a/2060503/55070)。这是

method.invoke(t,seq: _*)

有时候写下来真的很有帮助;-)

最新更新