2013-04-12 12 views
5

Dato un riferimento a un oggetto compagno classe case t e una sequenza del parametro seq, come posso richiamare una nuova istanza della classe case?dinamico creando una nuova istanza di una classe del caso in scala

Posso creare una classe quando digito il numero del parametro da solo.

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) 

Il problema non ho potuto risolvere è quello di chiamare invocare con una sequenza di argomenti come Seq("name",1:java.lang.Integer,2:java.lang.Integer). Qualsiasi aiuto su come farlo è molto apprezzato.

Io uso scala 2.10.0.

+3

Basta dire ** non ** a 'Any',' AnyVal', 'AnyRef',' mappa [String, Qualsiasi] 'ecc. Scala ha un sistema di tipi statici ricco e potente. Prova a progettare i tuoi programmi per sfruttarli invece di evitarlo. –

+2

Realizzo una costruzione DSL molto sofisticata. A volte devi andare nelle Badlands per questo ;-) – leo

risposta

Problemi correlati