Java 9模块声明中requires and requires transitive的区别
可读性(Readability)
首先要理解模块的可读性
module bar{
requires drink;
}
bar requires drink意味着:
- bar模块强制要求存在drink模块,这称为可靠配置。
- bar模块可以读入drink模块的文件,这称为可读性。
- bar模块可以访问drink模块的代码,这称为可访问性。
module bar{
requires transitive drink;
}
bar requires transitive drink和bar requires drink 一样,模块bar对模块drink同样具有依赖存在,可读以及可访问的特性。对于模块bar和模块drink来说,这两种写法没有区别。
隐含可读性(Implied readability)
transitive意为传递的意思。如果其他模块如customer依赖于bar模块,bar模块使用requires transitive引用drink模块,那么customer模块没有 直接声明依赖于drink模块,它对drink模块也是具有可读性的,这个称之为隐含可读性。
即bar requires transitive drink,加上customer requires bar,customer对drink也是可读。如果去掉transitive,则customer对drink不可读。