java.lang.reflect.Field的用例?

java.lang.reflect.Field的用例?,java,reflection,Java,Reflection,前几天,我在查看spring security(3.0.x分支)中acl模块的源代码时,发现一个ACLImpl对象有一组私有ACE(在db中由1-many反射表示)。深入研究代码,我发现没有明显的点来填充ace的私有集。我花了一段时间才发现填充是用java.lang.reflect.Field完成的: private final Field fieldAces = FieldUtils.getField(AclImpl.class, "aces"); ... fieldAces.setAcces

前几天,我在查看spring security(3.0.x分支)中acl模块的源代码时,发现一个ACLImpl对象有一组私有ACE(在db中由1-many反射表示)。深入研究代码,我发现没有明显的点来填充ace的私有集。我花了一段时间才发现填充是用
java.lang.reflect.Field
完成的:

private final Field fieldAces = FieldUtils.getField(AclImpl.class, "aces");
...
fieldAces.setAccessible(true);
...
try {
    fieldAces.set(acl, aces);
} catch (IllegalAccessException e) {
    throw new IllegalStateException("Could not set AclImpl entries", e);
}
(从
BasicLookupStrategy.java
复制的所有代码)
我认为该字段主要用于在晦涩的罐子中公开私有字段。除了混淆代码流之外,还有其他原因吗?

除了访问私有或不可访问的字段外,java.lang.reflect.Field的作用与整个反射机制大体相同:允许动态发现和操作编译时不一定已知的类型。Java和其他许多语言一样,是静态类型的。反射机制允许人们在某种程度上绕过它,并引入一些更动态的特性,例如,通过名称检索字段的值。这是无价的,因为我们认为理所当然的一些工具所执行的“魔法”大多依赖于它——想想JUnit、mocking框架、Hibernate、JAXP、gson。。。混淆代码流只是您可以使用java.lang.reflect.Field的众多奇妙功能之一:)

JSON绑定、XML绑定、ORM:所有这些都通过反射访问POJO的字段,以将它们序列化/反序列化到JSON、XML或数据库表中。我只是问自己:有没有真正的大规模用例,而不使用它?