2012-02-22 74 views
3

要設置的私人Field的價值,它需要被標記爲可訪問:Java:將私人會員字段設置爲可訪問的危險?

field.setAccessible(true); 

何時將安全管理器不允許這樣做?將它包含在圖書館中的便攜性如何?導入到特定上下文時會失敗嗎?

+2

如果你喜歡它,請確保你提供了一些回退(如果你無法直接訪問該字段,則搜索setter/getter)。 – biziclop 2012-02-22 20:22:42

回答

5

如果您知道您的庫不會在JVM啓用安全管理器的情況下使用,例如小應用程序或安全應用程序服務器,那就沒問題。但如果可能的話,我會盡量避免它。

還有其他答案,如this link,表明使用它沒有問題。所以,如果你認爲這是最好的方法,而其他選項太麻煩或者直接不存在,那麼繼續。

0

什麼時候SecurityManager不允許這個?

javadoc說:

首先,如果存在安全管理器,其checkPermission方法被調用了ReflectPermission("suppressAccessChecks")許可。如果標記爲真,但此對象的可訪問性可以不改變

SecurityException升高(例如,如果該元素對象是類Class一個Constructor對象)。

至於你的其他問題

便攜性如何是它包含這個庫中?導入到特定上下文時會失敗嗎?

它可以跨JVM實現移植,因爲Field是在覈心庫中用這些語義定義的。它不能跨實例移植,因爲不同的JVM實例可能具有不同的配置安全策略。