7

ケース クラスのコンパニオン オブジェクトへの参照と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)

私が解決できなかった問題は、 のような一連の引数で invoke を呼び出すことSeq("name",1:java.lang.Integer,2:java.lang.Integer)です。それを行う方法についてのヘルプは大歓迎です。

私はscala 2.10.0を使用しています。

4

1 に答える 1

5

自分で見つけました(それぞれここで見ましたhttps://stackoverflow.com/a/2060503/55070)。これは

method.invoke(t,seq: _*)

時々それを書き留めておくと本当に役立ちます;-)

于 2013-04-12T15:15:15.393 に答える