我看了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);
但错误相同
答案 0 :(得分:3)
Field#getInt的Object
参数必须是class A
的实例。
A a = new A();
int y = testnum.getInt(a);
由于name
和number
字段不是静态的,因此您无法从课程中获取它们;你必须从班级的特定实例中获取它们。
答案 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
类)作为参数提取