簡體   English   中英

Java:告訴 JVM 將所有字段/方法視為公共

[英]Java: Telling JVM to treat all fields/methods as public

我正在瀏覽一個 Java 代碼庫,並認為如果我可以暫時公開所有字段和方法,那么了解軟件的工作方式會容易得多。

訪問說明符基本上是程序員while he is coding要遵循的准則(例如,使用 setter 而不是直接賦值以允許 setter 執行與該字段相關的一些其他工作)。 是否可以在運行 java 程序時告訴 jvm 忽略訪問限制器?

另一種可能性可能是使用一些 IDE 插件,手動將所有內容的可見性更改為public

你所要求的在很多層面上都行不通。

  1. 您不能在源代碼/編譯級別執行此操作。 它改變了 Java 語言。 它也不會取得任何成就。

  2. 您不能在運行時以任何有用的方式執行此操作。 您可以使用反射使字段可訪問。 但是,這是不切實際的,因為:

    • 這必須一次完成一個Field ,或一次完成一個Class 例如

       Field[] fields = clazz.getDeclaredFields(); AccessibleObject.setAccessible(fields, true);
    • 您需要保留所有的Field對象,因此“治療”,因為設置Field對象可訪問不會影響到其他Field對象為同一領域。

    • 如果您修改源代碼以使用反射和上述Field對象來訪問字段值,則只能使用它。

  3. 如果您想了解您的代碼是如何工作的,還有其他更好的方法可以做到。

    • 閱讀並分析源代碼。 使用 IDE 來幫助您解決這個問題。
    • 使用調試器。 調試器允許您查看變量的狀態,而不管變量的訪問權限如何 它適用於參數和局部變量以及字段。
    • 向您的代碼添加一些調試日志記錄或跟蹤打印。 (並在您完成調查后刪除更改。使用版本控制來幫助您撤消更改。)

@ElliottFrisch 為什么這是個壞主意?

基本上,因為它不會幫助你。

您所要求的絕對是可以實現的,但會提出一些關於您為什么想要或需要這樣做的問題。 設置訪問修飾符幾乎總是有原因的。 事實上,如果您考慮一下為什么某些字段和方法被公開等,它可能會幫助您更多地了解該軟件。

我最近開始了一份新工作,我必須瀏覽一個大型代碼庫並嘗試了解所有內容的作用。 我發現使用調試器是單執行代碼並查看程序中每個點的每個字段、變量等的值的最佳方式。 所有好的 Java IDES 都有調試器。 我使用IntelliJ IDEA ,它有一個非常有用的調試器,它甚至允許您在程序運行的不同點運行自定義評估語句。

這通常被風格指南認為是叛國罪

選項:

  • 您仍然可以使用 java 反射來設置字段(私有、最終或其他),但缺點是您無法將其編碼為公共,您仍然必須調用某些方法將字段設置為 bla。
  • 使用 JNI 將 C 代碼鏈接到 java,而 C 真的不關心 Java 的字段可見性。

編譯器插件可能會工作,但是當大多數程序員知道如何工作時,他們也知道這是一個多么糟糕的主意。 當然,我現在很想嘗試。




注意:我有理由確信 java 的SecurityManager會在您嘗試將其數據公開時提出問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM