gpt4 book ai didi

java - 使用 this.getClass().getDeclaredField 方法时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 18:03:24 26 4
gpt4 key购买 nike

我只想获取 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 throws NullPointerException - 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com