2016-01-21 28 views
-1

當訪問一個不可見的字段或方法使用反射,這似乎是改變之後恢復原來的無障礙值常見的成語:更改後恢復原始可訪問性值的任何好理由?

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

我不知道是否有一個很好的理由,以恢復原來的無障礙狀態。我看到下面的情況:

  • 編譯代碼無法訪問反正領域。訪問使用反射還將要求setAccessible(真)
  • 使用反射只是爲了查詢方法的輔助將有可能得到錯誤的結果反正
  • 代碼,而try塊是不可見的領域
  • 代碼執行。

我傾向於認爲重置原始狀態是無用的。我錯過了什麼嗎?

回答

2

不,這沒有必要。

所有field.setAccessible確實會更新您用來解決該字段(您放入field局部變量中的那個)的單個引用。它沒有任何持久影響。下一次有人撥打clazz.getField或其他什麼,他們會得到一個新的對象(即使在談論同一場)。

相關問題