gpt4 book ai didi

java - 为什么这种使用反射的方法会抛出npe?

转载 作者:行者123 更新时间:2023-12-02 22:57:03 25 4
gpt4 key购买 nike

我有一些static final String字段,我想使用反射来获取它们的值,所以我做了一个这样的方法:

public String getLogoSrc(final String provider) {
if (provider.equals(StringUtils.EMPTY)) {
return StringUtils.EMPTY;
}

logger.info("---provider is: "+provider);

for (Field f : ConstantsBean.class.getDeclaredFields()) {
f.setAccessible(true);
if (f.getName().contains(provider.toUpperCase().replace(" ", "_"))) {
try {
return f.get(null) != null? f.get(null).toString() : "";
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

return StringUtils.EMPTY;
}


我只是不明白为什么在尝试返回值时总是收到NPE:

return f.get(null) != null? f.get(null).toString() : "";

例外是:

    java.lang.NullPointerException
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl
.java:36)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccess
orImpl.java:18)
at java.lang.reflect.Field.get(Field.java:358)
at com.gravitant.cloud.common.jsf.core.beans.ConstantsBean.getLogoSrc(Co
nstantsBean.java:195)


有什么线索吗?

最佳答案

在访问之前打印该字段。我怀疑您正在尝试访问非静态字段,因此将null传递给field.get()是不可接受的。

关于java - 为什么这种使用反射的方法会抛出npe?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13175761/

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