在Java 9之前,Java反射API拥有一项超能力:它能够在没有限制的情况下访问非公开的类成员。从Java 9开始,模块系统希望将反射API限制在合理的范围内。
在本教程中,我们将检查模块系统与反射之间的关系。
2. 模块系统与反射
尽管反射和模块系统在Java历史的不同时间出现,但它们需要协同工作以构建一个可靠的平台。
2.1 底层模型
Java模块系统的目标之一是强封装。强封装主要包括可读性和可访问性:
- 模块的可读性是一个粗略的概念,涉及一个模块是否依赖于另一个模块。
- 模块的可访问性是一个更细的概念,关心一个类是否可以访问另一个类的字段或方法。它由类边界、包边界和模块边界提供。
大约 6 分钟