Java模块规范中使用的所有这些术语之间有什么区别?我找不到这些没有循环引用自身的术语的定义。
规范做出了这样的声明,但是我还没有弄清楚这些词的实际含义:
具体来说,主机系统必须限制普通编译
本来可以观察到的单位,只有那些
对M可见
(JLS 11第7.3节第183页)
最佳答案
首先,在JLS中,像可见性这样的术语在应用于编译单元,包或类型时可能具有不同的含义。
在JLS中定义了术语的一些参考:
requires
和exports
可以观察到的元素。 另外,自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。