Java模块规范中使用的所有这些术语之间有什么区别?我找不到这些没有循环引用自身的术语的定义。
规范做出了这样的陈述,但是我还没有弄清楚这些词实际上是什么意思。
具体地说,主机系统必须限制普通编译 本来可以观察到的单位,只有那些 对M可见
({JLS 11第7.3节,第183页)
答案 0 :(得分:2)
首先,在JLS中,像可见性这样的术语在应用于编译单元,包或类型时可能具有不同的含义。
在JLS中定义了术语的一些参考文献
可观察:
可见:
可访问:
此外,自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.可访问:只要一个模块可以看到另一个模块中的包,这些包中的公共类型就会被一个模块导出到另一个模块。