我想澄清一件事。
使用“普通”Java 反射技术(不使用库)afaik 无法获得对私有字段的引用(我的意思是java.lang.reflect.Field
对象,没有字段值)。
例如,如果我有这个类:
public class MyClass {
private String field1;
}
如果我尝试执行此操作:
Field field = MyClass.class.getField("field1");
正如预期的那样,我会得到一个NoSuchFieldException
例外。
使用Guava Reflection library,如果我尝试执行此操作:
Object o = new MyClass();
Property property = Properties.getPropertyByName(o, "field1");
Field f = property.getField();
我得到以下异常:
java.lang.IllegalStateException: Unknown property: field1 in class MyClass
这也是意料之中的。但是,如果我添加一个 getter 方法,如下所示:
public class MyClass {
private String field1;
public String getField1() {return field1;}
}
然后番石榴反射代码正在工作。我不得不承认我对此有点茫然。我知道反射库可以使用 getter 来返回私有实例变量的值,但是 Field 对象本身只是因为 getter 存在?有人知道这是怎么发生的吗?