首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试检索字段值时的NoSuchFieldException

尝试检索字段值时的NoSuchFieldException
EN

Stack Overflow用户
提问于 2014-03-03 20:59:45
回答 3查看 1.6K关注 0票数 1

我读了的帖子,跟着guidelines去了那里。但是这并没有帮助;当字段存在时,我得到了NoSuchFieldException。示例code如下:

这是我的代码:

代码语言:javascript
复制
class A{
    private String name="sairam";
    private int number=100;
} 
public class Testing {
    public static void main(String[] args) throws Exception {
    Class cls = Class.forName("A");
    Field testnum=cls.getDeclaredField("number"); 
    testnum.setAccessible(true);
    int y = testnum.getInt(testnum);
    System.out.println(y);
    }
}

编辑:根据下面的回答,我尝试了以下方法:

代码语言:javascript
复制
Class cls = Class.forName("A");
    Field testnum=cls.getDeclaredField("number");
    testnum.setAccessible(true);
    A a = new A();
    int y = testnum.getInt(a);
    System.out.println(y);

但是错误是一样的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-03 21:11:20

Object参数Field#getInt必须是class A的实例。

代码语言:javascript
复制
A a = new A();
int y = testnum.getInt(a);

由于namenumber字段不是静态的,所以不能从类中获取它们;必须从类的特定实例中获取它们。

票数 3
EN

Stack Overflow用户

发布于 2014-03-03 21:17:58

如果您的代码与上面完全相同,那么就不应该有任何NoSuchFieldException。但可能会有一个IllegalAccessException。您应该将类的一个实例传递给getInt()

代码语言:javascript
复制
int y = testnum.getInt(cls.newInstance());
票数 0
EN

Stack Overflow用户

发布于 2014-03-03 21:31:33

使用

代码语言:javascript
复制
 int y = testnum.getInt(new A());

而不是

代码语言:javascript
复制
int y = testnum.getInt(testnum);

因为该方法需要对象(类A的对象,而不是您使用的Field类的对象)作为参数进行提取。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22157312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档