9

という名前の Bean クラスがありBean1ます。私のメインメソッドでは、変数の名前を含む文字列を取得しています:

String str= "Bean1"; 

String変数を使用してクラスを取得し、Bean プロパティにアクセスするにはどうすればよいでしょうか?

4

3 に答える 3

14

ステップバイステップ:

//1. As Kel has told you (+1), you need to use 
//Java reflection to get the Class Object.
Class c = Class.forName("package.name.Bean1");

//2. Then, you can create a new instance of the bean. 
//Assuming your Bean1 class has an empty public constructor:
Object o = c.newInstance();

//3. To access the object properties, you need to cast your object to a variable 
// of the type you need to access
Bean1 b = (Bean1) o;

//4. Access the properties:
b.setValue1("aValue");

この最後のステップでは、Bean のタイプ、またはアクセスする必要があるプロパティを持つスーパータイプを知る必要があります。そして、クラスに関するすべての情報がその名前を持つ文字列である場合、あなたはそれを知らないと思います。

リフレクションを使用すると、クラスのメソッドにアクセスできますが、この場合、呼び出されるメソッドの名前と入力パラメーターの型を知っている必要があります。例を進めて、手順 3 と 4 を変更します。

// 3. Get the method "setValue1" to access the property value1, 
//which accepts one parameter, of String type:
Method m=c.getMethod("setValue1", String.class);

// 4. Invoke the method on object o, passing the String "newValue" as argument:
m.invoke(o, "newValue");

実行時にこのすべての情報を利用できない場合は、設計を再考する必要があるかもしれません。

于 2010-10-27T07:14:43.603 に答える
13

JavaReflectionAPIを使用する必要があります。

Class c = Class.forName("package.name.Bean1");

次に、c.newInstance()を使用してクラスをインスタンス化できます。このメソッドは、パラメーターを必要としないコンストラクターを使用します。

詳細はこちらをご覧ください:http://download.oracle.com/javase/tutorial/reflect/

于 2010-10-27T06:49:39.977 に答える
2

Javaは可変変数をサポートしていますか?

Java は、その名前の文字列に基づいて変数を動的に取得することをサポートしていません (変数変数とも呼ばれます)。Map オブジェクトを使用して名前を Bean にマップするなど、あなたがしようとしていることを別の方法で行う可能性があります。質問を編集して、やりたいことをもう少し詳しく説明すると、より具体的な回答が得られる場合があります。

(一方、質問が Bean1 というクラスに関するものである場合は、Kel の権利です。)

于 2010-10-27T07:03:31.240 に答える