Java 模块词汇表

Java module glossary

Java 模块规范中使用的所有这些术语有什么区别?我找不到不循环引用自身的这些术语的定义。

规范中有这样的表述,但我还没有弄明白这些词到底是什么意思:

Specifically, the host system must limit the ordinary compilation units that would otherwise be observable, to only those that are visible to M

(JLS 11 第 7.3 节 p.183)

java.util.Observable与模块系统无关。

在JLS中,层次结构是自下而上的,如下: 1. Observable:编译器知道的编译单元的总和。 2. 可见:当前正在编译代码的模块读取的那些模块中的所有编译单元。每个模块读取的内容由 requires 指令驱动。可见性驱动范围内的包和类型,并影响可访问性。 3. Accessible: 一个模块导出到另一个模块的那些包中的 public 类型,只要第一个模块中的包对另一个模块可见。

首先,在 JLS 术语中,如可见性在应用于编译单元、包或类型时可能具有不同的含义。

一些在 JLS 中定义术语的参考资料:

  • 可观察:

    • 编译单元:§7.3,句首"The host system determines which compilation units are observable".

    • 包:§7.4.3,第一段。

    • 直觉:参与编译的元素

  • 可见:

    • 编译单元:§7.3,句子开头"The ordinary compilation units that are visible to M" - 注意可见性是相对于模块定义的

    • 包:§7.4.3,句子开始 "A package is visible to a module M" - 再次相对于模块。

    • 直觉:从给定模块的角度考虑requiresexports.[=21=可观察到的元素]

  • 可访问:

此外,自 JLS 9 以来的核心新概念是“唯一可见”(§7.4.3),加上术语 "potentially accessible"、"reads" / "read by", "associated with"。从历史上看,JLS 9 在 "technically observable" 和 "really observable" 之间做了进一步的区分,从 JLS 11 开始已被删除。

此外,在历史上(直到 JLS 8),"visible" 用于阴影的定义(§6.4.1),但这种用法已在 JLS 9 中撤回。

最后请注意,其中一些概念(明确或隐含地)从 java.lang.module 中的 API 中引入了定义。

我建议将这些术语视为技术术语,而不是为了迎合更广泛受众的直觉,部分原因是 JLS 中的许多定义都基于 "compilation units",这对于直观理解而言并不是必需的.有关可能的直觉理解与基于 JLS 的理解的比较,请参阅幻灯片 #20 of JDT embraces Java™ 9 - An insiders' view