首页 > 解决方案 > Java:告诉 JVM 将所有字段/方法视为公共的

问题描述

我正在浏览一个 java 代码库,并认为如果我可以暂时公开所有字段和方法,那么了解该软件的工作原理会容易得多。

访问说明符基本上是程序员要遵循的准则while he is coding(例如,使用 setter 而不是直接赋值以允许 setter 执行与该字段相关的一些其他工作)。运行java程序时是否可以告诉jvm忽略访问限制器?

另一种可能性可能是使用一些 IDE 插件,手动将所有内容的可见性更改为public.

标签: javatestingjvmpublic

解决方案


你所要求的在许多层面上都不起作用。

  1. 您不能在源代码/编译级别执行此操作。它改变了 Java 语言。它也不会取得任何成果。

  2. 您不能在运行时以任何有用的方式执行此操作。您可以使用反射使字段可访问。但是,这是不切实际的,因为:

    • 必须一次完成一项Field,或一次Class一项;例如

         Field[] fields = clazz.getDeclaredFields();
         AccessibleObject.setAccessible(fields, true);
      
    • 您需要保留所有Field如此“处理”的对象,因为将Field对象设置为可访问不会影响Field同一字段的其他对象。

    • 如果您修改源代码以使用反射和上述Field对象访问字段值,则只能使用此功能。

  3. 如果您想了解您的代码是如何工作的,还有其他更好的方法可以做到这一点。

    • 阅读并分析源代码。使用 IDE 来帮助您解决这个问题。
    • 使用调试器。调试器允许您查看变量的状态,而与变量的访问无关。它适用于参数和局部变量以及字段。
    • 将一些调试日志记录或跟踪打印添加到您的代码中。(并在完成调查后删除更改。使用版本控制来帮助您撤消更改。)

@ElliottFrisch 为什么这是个坏主意?

基本上,因为它不会帮助你。


推荐阅读