2013-04-12 159 views
5

给定一个案例类伴随对象t和一系列参数seq的引用如何调用案例类的新实例?在scala中动态创建一个案例类的新实例

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

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)的顺序调用。任何帮助如何做到这一点非常感谢。

我使用scala 2.10.0。

+3

只是说** **没有给'Any','AnyVal','AnyRef','地图[字符串,任何] '等等。斯卡拉拥有丰富,强大的静态类型系统。尝试设计你的程序来利用它而不是避免它。 –

+2

我做了一些非常复杂的DSL构建。有时你必须去荒芜之地;-) – leo

回答