【问题标题】:dynamical creating a new instance of a case class in scala在scala中动态创建案例类的新实例
【发布时间】:2013-04-12 15:08:41
【问题描述】:

给定对案例类伴随对象t 的引用和一系列参数seq 我如何调用案例类的新实例?

我自己输入参数号就可以创建一个类。

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) 之类的一系列参数调用invoke。非常感谢任何帮助如何做到这一点。

我使用 scala 2.10.0。

【问题讨论】:

  • AnyAnyValAnyRefMap[String, Any] 等说no。Scala 拥有丰富、强大的静态类型系统。尝试设计你的程序来利用它而不是避免它。
  • 我做了一些非常复杂的 DSL 构造。有时你必须为此去荒地;-)

标签: scala reflection


【解决方案1】:

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

method.invoke(t,seq: _*)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多