Java 9模块声明中requires and requires transitive的区别

时间:2021-11-07 16:31:53

可读性(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不可读。

Java 9模块声明中requires and requires transitive的区别

参考:What's the difference between requires and requires transitive statements in Java 9 module declaration