尝试检索字段值时出现NoSuchFieldException

时间:2014-03-03 20:59:45

标签: java class reflection field nosuchfileexception

我看了this帖子,然后跟着guidelines。但这没有帮助;当字段存在时,我得到NoSuchFieldException。示例code位于以下位置:

这是我的代码:

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);
    }
}

编辑:下面的答案,我试过这个:

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);

但错误相同

3 个答案:

答案 0 :(得分:3)

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

A a = new A();
int y = testnum.getInt(a);

由于namenumber字段不是静态的,因此您无法从课程中获取它们;你必须从班级的特定实例中获取它们。

答案 1 :(得分:0)

如果您的代码与上述完全相同,则不应该有NoSuchFieldException。但可能会有IllegalAccessException。您应该将该类的实例传递给getInt()

int y = testnum.getInt(cls.newInstance());

答案 2 :(得分:0)

使用

 int y = testnum.getInt(new A());

而不是

int y = testnum.getInt(testnum);

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