我只想获取 POJO 的一个字段名称,我的 java POJO 如下所示:
public class A1 {
private String field2;
private String field1;
public String getField2() {
return field2;
}
public void setField2(String field2) {
this.field2 = field2;
}
public String getField1() {
return field1;
}
public void setField1(String field1) {
this.field1 = field1;
}
@Override
public String toString() {
return "A1 [field2=" + field2 + ", field1=" + field1 + "]";
}
public String getFiled1Name() throws NoSuchFieldException, SecurityException{
return this.getClass().getDeclaredField(field1).getName();
}
}
在客户端代码中:
System.out.println(new A1().getFiled1Name());
我收到NullPointerException
我尝试了方法 this.getClass().getDeclaredFields()
,这按预期工作。但问题是:它返回所有字段(java.lang.reflect.Field
),我需要迭代、比较,然后返回正确的字段名。
相反,我只想获取一个字段名称,并且方法中没有硬编码的字段名称。我怎样才能得到这个?
最佳答案
您应该提供字段的名称而不是字段本身,因为 field1
是 String,它是 null
并且您将 null
传递给 getDeclaredField
,
public String getFiled1Name() throws NoSuchFieldException, SecurityException {
return getClass().getDeclaredField("field1").getName();
}
<小时/>
Class#getDeclareField
throwsNullPointerException
- if name is null
I don't want to hard code "field1"
您可以为字段名称创建一个常量,而不是使用反射,但对于名称的每次更改,您还需要更新常量。
以其他方式,您可以获取所有声明的字段并从数组中访问字段的名称。但使用它时要小心,因为声明中的更改可能会改变方法的行为。
public String getFiled1Name() throws NoSuchFieldException, SecurityException {
return getClass().getDeclaredFields()[0].getName();
}
关于java - 使用 this.getClass().getDeclaredField 方法时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38887744/