[英]Java: Accessing private field via reflection (behaviour)
Java初级; 使用反射可以访问私有字段(不问如何, 问题1和问题2 )确定。
我的问题与这种行为的性质有关。
.class
任何字段吗? 代码[已编辑]:
Field f = obj.getClass().getDeclaredField("field");
if (...) {
f.setAccessible(true);
// f IS accesible
}
// is f accesible?
有没有限制?
是的 - 你需要几个JVM权限 (最值得注意的是accessDeclaredMembers
和suppressAccessChecks
,在文档中标有大而粗的警告)才能使用它; 如果您的JVM的安全配置文件有点严格(例如,备受诟病的applet),您的代码将无法运行,因为这些权限将不可用。
它会永远改变吗?
是的,只要您的程序继续运行,字段将保持可访问状态(只要您继续使用您更改访问权限的相同Field
实例)。
这不好吗?
不必要。 它允许java代码使用私有字段序列化和反序列化对象,它允许复杂的模拟,可以简化测试,它允许您查看您无法查看的地方。 然而,由于它打破了期望,你应该谨慎使用它,并确保用户知道你需要额外的权限,“正在寻找引擎”。 文档(见上文)非常清楚地表明这被认为是有风险的,只有当你知道自己在做什么时才应该允许它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.