要设置私有Field
的值,需要将其标记为可访问:
field.setAccessible(true);
SecurityManager什么时候不允许这样?将它包含在库中有多便携?导入某些情境时会失败吗?
答案 0 :(得分:5)
如果您知道您的库不会在启用了安全管理器的JVM中使用,例如applet或安全的应用程序服务器,那么就可以了。但如果可能的话,我会尽量避免使用它。
其他答案如this link表明使用它没有问题。因此,如果您认为这是最好的方法,而其他选项太麻烦或者根本不存在,那就继续吧。
答案 1 :(得分:0)
SecurityManager什么时候不允许这样做?
javadoc说:
首先,如果有安全管理器,则使用
ReflectPermission("suppressAccessChecks")
权限调用其checkPermission方法。如果flag为true,则引发
SecurityException
但此对象的可访问性可能不会更改(例如,如果此元素对象是类Constructor
的{{1}}对象)。
关于你的另一个问题
将它包含在库中有多便携?导入某些情境时会失败吗?
它可以跨JVM实现移植,因为Class
在核心库中使用这些语义定义。它不能跨实例移植,因为不同的JVM实例可能具有不同配置的安全策略。