gpt4 book ai didi

Java 9 嵌套(分层或父/子)模块

转载 作者:行者123 更新时间:2023-11-29 07:27:35 26 4
gpt4 key购买 nike

是否可以在 Java 9 中创建基于继承(或嵌套)的模块?

像这样:

module a
|
├── module a1
|
└── module a2

在这个例子中,a1a2 模块都是 a 的子模块。

如果我导入其中一个子模块,我将获得父模块 (a) 的功能以及该子模块中定义的任何功能。也就是说,我可以导入 a1,并明确访问 aa1 的功能(但不是 a2).

a1a2都是一个a,可以访问a的所有包,不需要必须向他们公开 a 的包。

最佳答案

您可以模拟您使用requires transitiveexports to 语法的组合:

  • requires transitive:指定导入此模块将固有地导入另一个模块。您可以使用它来确保 a1a2 导致 a 被导入。
  • exports to:这将允许您仅将功能导出到特定模块;这将允许您让 a 授予访问 a1a2 功能的权限,这些功能公开导出会很危险。

所以,举个例子:

module a {
exports com.internal to a1;
exports com.internal to a2;
}

module a1 {
requires transitive a;
}

module a2 {
requires transitive a;
}

在这种情况下,如果消费者依赖于 a1,他们将固有地依赖于 a(从而获得两者的效用)和 com. internal 包,虽然对内部使用的 a1 可见,但对消费者不可见。

这不是你要求的。 a1 不是 a。此外,a1 不能成为 aJLS不允许在导出中使用通配符(即:exports * to a1,这仍然不会使 a1 成为 a,但会使它更接近从务实的角度来看),并且模块中不存在允许它的其他语法。

关于Java 9 嵌套(分层或父/子)模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747477/

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