我可以使用Reflection在Java中使用Method获取Field(变量/属性)名称吗?

时间:2012-11-22 14:32:57

标签: java reflection

我可以使用Reflection在Java中使用方法获取Field(变量/属性)名称吗?我在下面的代码中解释了我的场景。

例如,我有一个班级

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;
}

请尽可能帮助我......提前谢谢

3 个答案:

答案 0 :(得分:0)

你的意思是?

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

BTW:字段名称应位于camcelCase而不是TitleCase

答案 1 :(得分:0)

如果按照JavaBeans约定命名字段,则应该执行以下所有操作:

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

因此getName()或setName()应返回" name"

答案 2 :(得分:0)

这样可行,但你的课程定义不明确。
字段应使用camelCase表示法命名,以较低的字符开头:

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