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

  • 可见
  • 可观察的
  • 可访问的

  • 规范做出了这样的声明,但是我还没有弄清楚这些词的实际含义:

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

    (JLS 11第7.3节第183页)

    最佳答案

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

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

  • 可观察到的:
  • 编译单元:§7.3,句子开头:“主机系统确定可以观察到哪些编译单元”。
  • 软件包:§7.4.3,第一段。
  • 直觉:参与编译的元素。
  • 可见:
  • 编译单元:§7.3,以“M可见的普通编译单元”开头的句子-请注意,可见性是相对于
  • 模块定义的
  • 软件包:§7.4.3,句子开头是“模块M对模块可见”-还是相对于模块而言。
  • 直觉:从给定模块的角度考虑requiresexports可以观察到的元素。
  • 可访问的:
  • 常规定义:§6.6

  • 另外,自JLS 9起的主要新概念是“唯一可见的”(§7.4.3),加上术语“可能可访问”,“读取” /“读取者”,“与...关联”。从历史上看,JLS 9在“技术上可观察的”和“真正可观察的”之间做了进一步的区分,从JLS 11开始已将其删除。

    同样,从历史上(直到JLS 8),在阴影(§6.4.1)的定义中使用了“visible”,但是在JLS 9中已取消了这种用法。

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

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

    10-08 03:43