1

我阅读了这篇文章并关注了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);

但错误是一样的

4

3 回答 3

3

Field#getIntObject参数必须是.class A

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

由于nameandnumber字段不是静态的,因此您无法从类中获取它们;您必须从类的特定实例中获取它们。

于 2014-03-03T21:11:20.160 回答
0

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

int y = testnum.getInt(cls.newInstance());
于 2014-03-03T21:17:58.927 回答
0

利用

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

代替

int y = testnum.getInt(testnum);

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

于 2014-03-03T21:31:33.123 回答