[英]Java: Accessing private field via reflection (behaviour)
Java初級; 使用反射可以訪問私有字段(不問如何, 問題1和問題2 )確定。
我的問題與這種行為的性質有關。
.class
任何字段嗎? 代碼[已編輯]:
Field f = obj.getClass().getDeclaredField("field");
if (...) {
f.setAccessible(true);
// f IS accesible
}
// is f accesible?
有沒有限制?
是的 - 你需要幾個JVM權限 (最值得注意的是accessDeclaredMembers
和suppressAccessChecks
,在文檔中標有大而粗的警告)才能使用它; 如果您的JVM的安全配置文件有點嚴格(例如,備受詬病的applet),您的代碼將無法運行,因為這些權限將不可用。
它會永遠改變嗎?
是的,只要您的程序繼續運行,字段將保持可訪問狀態(只要您繼續使用您更改訪問權限的相同Field
實例)。
這不好嗎?
不必要。 它允許java代碼使用私有字段序列化和反序列化對象,它允許復雜的模擬,可以簡化測試,它允許您查看您無法查看的地方。 然而,由於它打破了期望,你應該謹慎使用它,並確保用戶知道你需要額外的權限,“正在尋找引擎”。 文檔(見上文)非常清楚地表明這被認為是有風險的,只有當你知道自己在做什么時才應該允許它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.