Java模块词汇表

时间:2018-12-02 17:11:09

标签: java java-9 java-module

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

  • 可见
  • 可观察
  • 可访问

规范做出了这样的陈述,但是我还没有弄清楚这些词实际上是什么意思。

  

具体地说,主机系统必须限制普通编译   本来可以观察到的单位,只有那些   对M可见

({JLS 11第7.3节,第183页)

2 个答案:

答案 0 :(得分:2)

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

在JLS中定义了术语的一些参考文献

  • 可观察

    • 编译单元:§7.3,句子开头“主机系统确定可观察到的编译单元”。

    • 包装:§7.4.3,第一段。

    • 直觉:参与编译的元素。

  • 可见

    • 编译单元:§7.3,句子开头“ M可见的普通编译单元” -请注意,可见性是相对于模块定义的

      < / li>
    • 软件包:§7.4.3,句子开头“模块M对模块可见” -相对于模块而言。

    • 直觉:从给定模块的角度考虑requiresexports的元素。

  • 可访问

此外,自JLS 9以来的中心新概念是“ 唯一可见”(§7.4.3),以及术语“可能访问”,“读取” /“读取者”,“有关联”。从历史上看,JLS 9在“技术上可观察的”和“真正可观察的”之间作了进一步区分,从JLS 11开始已被删除。

此外,从历史上(直到JLS 8),在阴影(§6.4.1)的定义中使用了“可见”,但在JLS 9中已取消了这种使用。

最后请注意,其中一些概念(显式或隐式)从java.lang.module中的API中提取定义。

我建议将这些术语视为技术术语,而不是为了吸引广大读者的直觉,部分原因是JLS中的许多定义都涉及“编译单元”,而对于直观理解而言,这些定义不是必需的。有关可能的直观理解与基于JLS的理解的比较,请参见JDT embraces Java™ 9 - An insiders' view的幻灯片#20。

答案 1 :(得分:0)

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

在JLS中,层次结构自下而上,如下所示: 1.可观察的:编译器知道的所有编译单元。 2.可见:当前正在编译其代码的模块读取的那些模块中的所有编译单元。每个模块读取的内容由requires指令驱动。可见性驱动范围内的软件包和类型,并影响可访问性。 3.可访问:只要一个模块可以看到另一个模块中的包,这些包中的公共类型就会被一个模块导出到另一个模块。