我可以使用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;
}
请尽可能帮助我......提前谢谢
答案 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