是否可以在Java 9中创建基于继承的(或嵌套的)模块?
像这样的东西:
module a
|
??? module a1
|
??? module a2
Run Code Online (Sandbox Code Playgroud)
在这个例子中,a1和a2模块都是子项a.
如果我导入其中一个子模块,我将获得parent(a)的功能以及该子项中定义的任何功能.也就是说,我可以导入a1,并明确访问两者的功能a和a1(但不包括a2).
这两个a1和a2是一个a,并且可以访问所有的包a,而无需的包揭露a他们.
您可以通过组合和语法模拟您要求的内容:requires transitiveexports to
requires transitive:指定导入此模块将固有地导入另一个模块.你可以用它来确保a1并a2导致a进口.exports to:这将允许您仅将功能导出到特定模块; 这将允许您a提供访问a1和a2公开导出危险的功能.所以,举例来说:
module a {
exports com.internal to a1;
exports com.internal to a2;
}
module a1 {
requires transitive a;
}
module a2 {
requires transitive a;
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果消费者依赖a1,他们将固有地依赖a(从而获得两者的效用),并且com.internal包装虽然a1可供内部使用,但对于消费者而言在外部是不可见的.
这不是你要求的. a1是不是一个a.而且,a1 不能成为一个a; 在JLS不允许出口通配符(IE:,exports * to a1仍然不会让a1的a,但会使其从务实的角度拉近),并没有其他的语法模块存在允许它.
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |