原則: Java のリフレクションは属性の名前を取得し、invoke を通じてクラスのメソッドを呼び出すことができます。
たとえば、userName というプロパティがあり、このクラスは getUserName というメソッドを記述し、getUserName メソッドは invoke を通じて呼び出されます。
コードは次のとおりです
次のようにコードをコピーします。
java.lang.reflect.Fieldをインポートします。
java.lang.reflect.Methodをインポートします。
java.util.HashMapをインポートします。
java.util.Mapをインポートします。
パブリック クラス ParameterBase
{
/**
* クラスフィールドと値のマップを取得
* @戻る
*/
public Map<String, String> getClassInfo()
{
Map<String,String> フィールドと値 = new HashMap<String, String>();
フィールド [] フィールド = this.getClass().getDeclaredFields();
for(int i=0; i< フィールド.length; i++)
{
フィールド f = フィールド[i];
文字列値 = getFieldValue(this,f.getName()).toString();
fieldAndValues.put(f.getName(),value);
}
フィールドと値を返します。
}
private String getFieldValue(オブジェクト所有者, String fieldName)
{
return invokeMethod(owner, fieldName,null).toString();
}
/**
*
* 特定のFieldのgetFieldメソッドを実行する
*
* @param オーナークラス
* @param fieldName クラスの属性名
* @param args パラメータ、デフォルトは null
* @戻る
*/
private Object invokeMethod(オブジェクト所有者、文字列フィールド名、オブジェクト[]引数)
{
クラス<? オブジェクトを拡張> ownerClass = owner.getClass();
//フィールド名 -> フィールド名
文字列メソッド名 = フィールド名.substring(0, 1).toUpperCase()+ フィールド名.substring(1);
メソッドメソッド = null;
試す
{
メソッド = ownerClass.getMethod("get" + メソッド名);
}
catch (セキュリティ例外 e)
{
//e.printStackTrace();
}
catch (NoSuchMethodException e)
{
// e.printStackTrace();
戻る "";
}
//getMethodを呼び出す
試す
{
returnメソッド.invoke(owner);
}
catch (例外 e)
{
戻る "";
}
}
}
ParameterBaseを継承したクラスUserを記述し、テストコードを記述する
次のようにコードをコピーします。
パブリック クラス ユーザーは ParameterBase を拡張します
{
文字列ユーザー名;
文字列 passWorld;
パブリック String getUserName()
{
ユーザー名を返します。
}
public void setUserName(String userName)
{
this.userName = ユーザー名;
}
パブリック String getPassWorld()
{
passWorld を返します。
}
public void setPassWorld(String passWorld)
{
this.passWorld = passWorld;
}
public static void main(String[] args)
{
ユーザー u = 新しいユーザー();
u.passWorld = "123";
u.userName = "aaaaa";
System.out.println(u.getClassInfo().toString());
}
}
プログラム出力
次のようにコードをコピーします。
{passWorld=123、ユーザー名=aaaa}