[英]Java: Telling JVM to treat all fields/methods as public
我正在瀏覽一個 Java 代碼庫,並認為如果我可以暫時公開所有字段和方法,那么了解軟件的工作方式會容易得多。
訪問說明符基本上是程序員while he is coding
要遵循的准則(例如,使用 setter 而不是直接賦值以允許 setter 執行與該字段相關的一些其他工作)。 是否可以在運行 java 程序時告訴 jvm 忽略訪問限制器?
另一種可能性可能是使用一些 IDE 插件,手動將所有內容的可見性更改為public
。
你所要求的在很多層面上都行不通。
您不能在源代碼/編譯級別執行此操作。 它改變了 Java 語言。 它也不會取得任何成就。
您不能在運行時以任何有用的方式執行此操作。 您可以使用反射使字段可訪問。 但是,這是不切實際的,因為:
這必須一次完成一個Field
,或一次完成一個Class
; 例如
Field[] fields = clazz.getDeclaredFields(); AccessibleObject.setAccessible(fields, true);
您需要保留所有的Field
對象,因此“治療”,因為設置Field
對象可訪問不會影響到其他Field
對象為同一領域。
如果您修改源代碼以使用反射和上述Field
對象來訪問字段值,則只能使用它。
如果您想了解您的代碼是如何工作的,還有其他更好的方法可以做到。
@ElliottFrisch 為什么這是個壞主意?
基本上,因為它不會幫助你。
您所要求的絕對是可以實現的,但會提出一些關於您為什么想要或需要這樣做的問題。 設置訪問修飾符幾乎總是有原因的。 事實上,如果您考慮一下為什么某些字段和方法被公開等,它可能會幫助您更多地了解該軟件。
我最近開始了一份新工作,我必須瀏覽一個大型代碼庫並嘗試了解所有內容的作用。 我發現使用調試器是單步執行代碼並查看程序中每個點的每個字段、變量等的值的最佳方式。 所有好的 Java IDES 都有調試器。 我使用IntelliJ IDEA ,它有一個非常有用的調試器,它甚至允許您在程序運行的不同點運行自定義評估語句。
這通常被風格指南認為是叛國罪。
選項:
編譯器插件可能會工作,但是當大多數程序員知道如何工作時,他們也知道這是一個多么糟糕的主意。 當然,我現在很想嘗試。
注意:我有理由確信 java 的SecurityManager
會在您嘗試將其數據公開時提出問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.