可以使用以下代码通过名称访问类属性:
MyClass.class.getDeclaredField("myAtt");
是否可以创建一个反向的函数?即一个将属性转换为其名称的函数?
编辑:我添加此编辑以使这一点更清楚:
考虑以下课程:
class MyClass {
Integer myAttribute;
}
我正在寻找一个接受myAttribute
(本身,或对它的引用。idk!)并返回"myAttribute"
字符串的函数。
可以使用以下代码通过名称访问类属性:
MyClass.class.getDeclaredField("myAtt");
是否可以创建一个反向的函数?即一个将属性转换为其名称的函数?
编辑:我添加此编辑以使这一点更清楚:
考虑以下课程:
class MyClass {
Integer myAttribute;
}
我正在寻找一个接受myAttribute
(本身,或对它的引用。idk!)并返回"myAttribute"
字符串的函数。
尝试java.lang.reflect.Field.getName();
您可以使用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();
但是从上述字段中获取名称没有意义。如果您只是在寻找这个,我会感到惊讶。但是您的问题可以更清楚。
如果我理解您的问题,您想要获取当前值与变量值匹配的字段的名称。
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);