Java:告诉JVM将所有字段/方法视为公共字段

sag*_*aga -5 java testing jvm public

我正在浏览一个java代码库,并认为如果我能暂时将所有字段和方法公开,那么看看软件如何工作会容易得多.

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

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

Ste*_*n C 5

你所要求的不会在多个层面上发挥作用.

  1. 您无法在源代码/编译级别执行此操作.它改变了Java语言.它也无法实现任何目标.

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

    • 这必须一次Field一个,或一次Class一个; 例如

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

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

  3. 如果您试图了解代码的工作原理,还有其他更好的方法.

    • 阅读并分析源代码.使用IDE来帮助您完成此任务.
    • 使用调试器.调试器允许您查看变量的状态,而不管变量的访问权限如何.它适用于参数和局部变量以及字段.
    • 在代码中添加一些调试日志记录或跟踪打印.(并在完成调查后删除更改.使用版本控制来帮助您撤消更改.)

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

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