Java初級;使用反射可以訪問私人領域(不問如何, Question 1和Question 2)好的。Java:通過反射訪問私人領域(行爲)
我的問題與這種行爲的性質有關。
- 有什麼限制嗎?我可以訪問我遇到的任何
.class
的字段嗎? - 在我的代碼中,一旦你設置了一個字段的可見性,可以說「公開」,它是永久改變還是直到上下文結束(方法,如果...)? 以下代碼
- 是不是ok給大家?我的意思是,StackOverflow的Seniors程序員,是否存在安全漏洞?
代碼將帖子:
Field f = obj.getClass().getDeclaredField("field");
if (...) {
f.setAccessible(true);
// f IS accesible
}
// is f accesible?
在某些情況下,反射是違反規定的。想到的一種情況是通過反射訪問它的'private'構造函數來創建一個'Singleton'類的多個實例。 – CKing
你是什麼意思「*在我的代碼中,一旦你設置了一個字段的可見性讓我們說」公開「,*」?如果你指的是'f.setAccessible(true)',那麼你准許訪問它所表示的Field的這個特定實例。如果您創建另一個Filed指向同一個字段的實例(不管在前一個字段實例上調用了setAccessible(true)),這個新實例將無法訪問專用字段。 – Pshemo
@Chetan Kinger正是!如果某件事被設計成私人的......讓它成爲私人的。在私有屬性的情況下......嘗試調用已實現的getter。 Pshemo,在你調用setAccessible的上下文結束時仍然可以訪問(編輯我的問題) – Manu