variable2
の値がnullの場合、Reflection APIを使用してクラスをインスタンス化するとどうなりますか?リフレクションAPIを使用してBeanクラスのゲッターメソッドにアクセスするには?
ここでは、Variable1
の値がセットごとに正しく返されます。ここでは、オブジェクトを正常にインスタンス化しました。 ReflectionAPI
を使用してvariable2
の値を取得するにはどうすればよいですか?
package com.OP.app;
public class Bean {
private String variable1;
private String variable2;
public String getVariable1() {
return variable1;
}
public void setVariable1(String variable1) {
this.variable1 = variable1;
}
public String getVariable2() {
return variable2;
}
public void setVariable2(String variable2) {
this.variable2 = variable2;
}
}
package com.OP.app;
import java.lang.reflect.Method;
public class ObjectCall {
public static void main(String []args){
Bean beanobject = new Bean();
beanobject.setVariable1("Ram");
beanobject.setVariable2("Rakesh");
System.out.println(beanobject.getVariable1());
String path = "com.OP.app.Bean";
Class<?> newClass;
try {
newClass = Class.forName(path);
Object obj = newClass.newInstance();
String getMethod = "getVariable2";
Method getNameMethod = obj.getClass().getMethod(getMethod);
String name = (String) getNameMethod.invoke(obj);
System.out.println(name);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // convert string classname to class
}
}
出力: ラム ヌル
これは機能しません: 'Class.forName'は、パッケージ名ではなく、修飾されたクラス名を期待しています。しかし、 'Class > beanClazz = Bean.class;'はとにかく簡単です。 – CoronA
あなたは正しいです。 Beanクラスは完全なクラス名を必要とします(getName()はこれを行います)。 'Class > beanClazz = Bean.class;'より簡単ですが、クラスが実行時にしかわからない場合は、ハードコードされたクラス宣言では何もできません。 –