2016-04-26 7 views
0

1から4のパラメータを取るクラスがあります。彼らは常に弦です。関数に渡される引数の数に基づいてこのクラスのオブジェクトを作成したいと思います。コンストラクタを作成して、オブジェクトの配列をnewInstanceに直接渡す必要はありませんか?Scalaのリフレクションでパラメータコンストラクタを使用してクラスを作成する

 NewInstanceWithReflection clazz = (NewInstanceWithReflection)Class.forName("NewInstanceWithReflection").newInstance(); 
     Constructor constructor = NewInstanceWithReflection.class.getDeclaredConstructor(new Class[] {String.class}); 
     NewInstanceWithReflection object1 = (NewInstanceWithReflection)clazz.newInstance(new Object[]{"StackOverFlow"}); 

このコードはsbtインタプリタに貼り付けられても動作しません。どんな助けもありがたい。

答えて

0

あなたはそれがすべて間違っています(言及はないが、それはjavaの構文であり、scalaではありません)。このような 何かがScalaで動作するはずです:

classOf[NewInstanceWithReflection] 
    .getDeclaredConstructor(classOf[String]) 
    .newInstance("StackOverFlow") 

そして、これはあなたがJavaで必要があると思いますものです:

NewInstanceWithReflection 
    .class 
    .getDeclaredConstructor(String.class) 
    .newInstance("StackOverFlow") 
+0

申し訳ありませんが、私は私のコード例を台無しにしました。 String引数の量が1から4まで変化する可能性があるので、 '.getDeclaredConstructor(classOf [String])'をスキップすることができるかどうかを知りたいだけでした。そして、argsの動的数を 'newInstance'メソッド。 – NNamed

+0

いいえ、それは不可能です... 'newInstance'は' Constructor'オブジェクトのメソッドです。メソッドを呼び出すにはオブジェクトを持つ必要があります。したがって、オブジェクトインスタンスの取得を「スキップ」することは機能しません。 – Dima

関連する問題