更改后恢复原始accessiblity值的任何充分理由?

时间:2016-01-21 10:51:50

标签: java reflection

使用反射访问不可见的字段或方法时,更改后恢复原始辅助功能值似乎是一种常见的习惯用法:

Field field = ...
boolean origAccessibility = field.getAccessibility();
field.setAccessibility(true);
try {
  // access field
} finally {
  field.setAccessibility(origAccessibility);
}

我想知道是否有充分理由恢复原始辅助功能状态。我看到以下情况:

  • 编译代码无论如何都无法访问该字段。
  • 使用反射访问不可见字段的代码也会调用setAccessible(true)
  • 使用反射来查询方法的可访问性的代码无论如何都会获得错误的结果,同时执行try块。

我倾向于认为重置原始状态是没用的。我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

不,这不是必需的。

所有field.setAccessible都会更新您用于处理字段的单个引用(您放在field局部变量中的字段)。它没有任何持久的影响。下次有人打电话给clazz.getField或其他什么时,他们会得到一个新的对象(即使在谈论相同的领域时)。