0

可以使用以下代码通过名称访问类属性:

MyClass.class.getDeclaredField("myAtt");

是否可以创建一个反向的函数?即一个将属性转换为其名称的函数?

编辑:我添加此编辑以使这一点更清楚:
考虑以下课程:

class MyClass {
    Integer myAttribute;
}

我正在寻找一个接受myAttribute(本身,或对它的引用。idk!)并返回"myAttribute"字符串的函数。

4

3 回答 3

3

尝试java.lang.reflect.Field.getName();

于 2012-10-17T12:22:46.690 回答
2

您可以使用Field#getName方法: -

Field[] fields = MyClass.class.getDeclaredFields();

for (Field field: fields) {
    System.out.println(field.getName());
}

PS : - 您应该以uppercase字母开头命名您的课程。

更新:-好的,如果您有属性名称:- private String attrName;,您可以使用以下方法获取相应的字段:-

Field field = MyClass.class.getDeclaredField("attrName");

// Then do this. Which is meaningless. But I don't know why you want to do this
// Your fieldName will contain "attrName" which you know already
String fieldName = field.getName();

但是从上述字段中获取名称没有意义。如果您只是在寻找这个,我会感到惊讶。但是您的问题可以更清楚。

于 2012-10-17T12:23:08.463 回答
0

如果我理解您的问题,您想要获取当前值与变量值匹配的字段的名称。

private String getAttributeName(Object myInstance, Object myValue) throws IllegalAccessException
{
    Field[] fields = MyClass.class.getDeclaredFields();
    for (Field each : fields)
    {
        if (each.get(myInstance).equals(myValue))
            return each.getName();
    }
    return null;
}

然后就可以调用了

    getAttributeName(myInstance, myValue);
于 2012-10-17T12:50:01.523 回答