gpt4 book ai didi

java - 为什么未模块的 JAR 可以访问模块 JAR 的非公开包?

转载 作者:行者123 更新时间:2023-11-30 06:05:12 26 4
gpt4 key购买 nike

我正在 intelliJ 中使用 Java 9:我创建了 4 个模块(所有模块都依赖于 module1):

  1. module1:导出包 pkg1 并将 pkg2 导出到模块 2。
  2. module2:需要 module1 并且能够访问这两个包
  3. module3:需要 module1 并且只能访问 pkg1
  4. module4:没有module-info.class,可以访问module1的两个包

我认为自动模块应该要求所有暴露的封装,而不是那些未暴露的。

如果封装仅适用于显式模块 JAR,我不明白封装的意义何在。

我错过了什么?

最佳答案

在您的示例中,module4无法访问pkg2。自动模块读取所有其他模块(因为它们无法表达依赖关系),但 rules to access types未更改,因此只能访问导出包中的公共(public)类型。

基于您的引用的一些背景:

I thought that automatic modules should require all exposed packaged but not the ones which are not exposed.

显式模块(即非自动模块)需要其他模块。在运行时,这些 require 指令是 turned into readability edges 。但它们并不是这些边的唯一来源:对于自动模块,边会添加到每个已解析的模块中(即将其放入可读性图中)。

因此,当您说“自动模块应该需要所有公开的包”时,有一些错误,可能在翻译中丢失,但我仍然想澄清一下。该句子应该改为“自动模块读取所有(已解析)模块”。

现阶段还没有人谈论可访问性和软件包。这是下一步,这里的自动模块并不特殊,因此它们无法访问内部 API。

关于java - 为什么未模块的 JAR 可以访问模块 JAR 的非公开包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47346736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com