java - Java:告诉 JVM 将所有字段/方法视为公共的
问题描述
我正在浏览一个 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
对象访问字段值,则只能使用此功能。
如果您想了解您的代码是如何工作的,还有其他更好的方法可以做到这一点。
- 阅读并分析源代码。使用 IDE 来帮助您解决这个问题。
- 使用调试器。调试器允许您查看变量的状态,而与变量的访问无关。它适用于参数和局部变量以及字段。
- 将一些调试日志记录或跟踪打印添加到您的代码中。(并在完成调查后删除更改。使用版本控制来帮助您撤消更改。)
@ElliottFrisch 为什么这是个坏主意?
基本上,因为它不会帮助你。
推荐阅读
- python - 规范化 Python 中的字典字典
- xamarin.forms - 具有 Xamarin 表单的蓝牙 IGXMedia 上的 Gurux
- python - 如何使用 python 发布 kafka 模式
- javascript - 'ReferenceError: jest is not defined' 运行单元测试时
- c# - 如何从搜索查询中排除项目
- python - 我怎么能从类点调用一个对象,以便我可以在矩形中使用它
- c# - 需要帮助找出为什么选项不会在下拉菜单中弹出
- android - 在 JSON 对象中解析 JSON 对象
- java - WebFlux 和 Reactor 3.4.0 - 已弃用的 FluxProcessors - 如何订阅接收器?
- php - 我不是编码员,但在我的网站上收到以下 php 错误。它出现在屏幕中间的 WPBakery 悬停框上方。帮助表示赞赏