【问题标题】:Any good reason to restore the original accessiblity value after changing it? [duplicate]更改后恢复原始可访问性值的任何充分理由? [复制]
【发布时间】:2016-01-21 10:51:49
【问题描述】:

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

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

我想知道是否有充分的理由恢复原始的可访问性状态。我看到以下情况:

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

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

【问题讨论】:

    标签: java reflection


    【解决方案1】:

    不,这没有必要。

    所有field.setAccessible 所做的只是更新您用来寻址该字段的单个引用(您放入field 局部变量的那个)。它没有任何持久的影响。下次别人打电话给clazz.getField 或其他什么时,他们会得到一个新的对象(即使是在谈论同一个字段时)。

    【讨论】:

    • 在一些单元测试中,我用反射改变了一些静态字段。此覆盖在另一个类上持续存在:s。我将复制问题并发布问题
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 2018-01-15
    • 2013-06-11
    相关资源
    最近更新 更多