0

リフレクションを使用して Java のメソッドを使用してフィールド (変数/プロパティ) 名を取得できますか? 次のコードでシナリオを説明しています。

たとえば、私は1つのクラスを持っています

class MyBean
{
    String name;
    String Name;

    public String getName() {
        return Name;
    }
    public void setName(String name) {
        this.Name = name;
    }
}

java.lang.reflect.Method "getName()" を使用してフィールド "Name" が欲しいのですが、取得できますか?

私はこのような機能が欲しい..

public String getFieldName(Method method)
{
    String fieldName=null;

    // code for finding field/variable/property name using method

    return fieldName;
}

可能であれば、私を助けてください...事前に感謝します

4

3 に答える 3

0

これは機能しますが、クラスが明確に定義されていません。
フィールドには、小文字で始まるキャメルケース表記を使用して名前を付ける必要があります。

class Info
{
    public String name1;
    private String name2;
}

これで、オブジェクト情報が得られました。

Info info;

次に、name1の値を取得します。

これがすべてを示す完全なテストケースです:

public class InfoTest extends TestCase{

public static class Info {

    private    String name1;
    public     String name2;
    protected  String name3;
    String name4;

    /**
     * Default constructor.
     */
    public Info() {
        name1 = "name1Value";
        name2 = "name2Value";
        name3 = "name3Value";
        name4 = "name4Value";
    }

}

public void testReflection() throws IllegalArgumentException, IllegalAccessException {

    Info info1 = new Info();

    Field[] infoFields = info1.getClass().getDeclaredFields();
    for (int i = 0; i < infoFields.length; i++) {
        Field fieldName = infoFields[i];
        System.out.println("the name of the field " + i +  ":" + fieldName.getName());
        fieldName.setAccessible(true);
        Object info1ValObj = infoFields[0].get(info1);
        System.out.println("the value of the field: " + info1ValObj.toString());
    }
}

}

出力は次のようになります
。フィールドの名前0:name1フィールド
の値:name1Valueフィールド
の名前1:name2フィールド
の値:name1Valueフィールド
の名前2:name3フィールド
の値:name1Value
フィールドの名前3
:name4フィールドの値:name1Value

于 2012-11-22T14:55:35.840 に答える
0

JavaBeans 規則に従ってフィールドに名前を付けている場合、これですべてのことができます。

public String getFieldName(Method method) {
    return method.getName().substring(3).toLowerCase();
}

したがって、getName() または setName() は「name」を返す必要があります。

于 2012-11-22T14:49:58.300 に答える
-1

ということですか?

public String getFieldName(Method method) {
    return method.getName().substring(3);
}

ところで:フィールド名はすべきではcamcelCaseありませんTitleCase

于 2012-11-22T14:35:08.957 に答える