【发布时间】:2016-12-18 06:40:18
【问题描述】:
Jigsaw 项目的核心是 Java 模块系统,如果能够限制对特定模块内特定程序元素(类、方法和字段)的访问,那就太好了。
当模块中有一些元素对于这个模块本质上是公共的,但在这个模块之外不应该被访问时,它会很有帮助。
所以我说的是“package-local”之后的下一个访问级别,可以命名为“module-local”。
然而,对Jigsaw rules 和早期规格的简要了解并没有帮助我找到这种功能。更具体地说,this Modifier specification 不包含任何新元素。
那么在未来的 Java 9 中还有其他可能吗?
【问题讨论】:
-
据我了解,模块默认是关闭的。你必须明确地导出东西以使它们从外部需要。 openjdk.java.net/projects/jigsaw/quick-start 和 en.wikipedia.org/wiki/Java_Module_System 。我只是误解了你在这里问的问题吗?
-
根据The State of the Module System,只有导出的包在模块外可用。例如,参见this table。
-
@Gimby 你说的很对:可以导出特定的包。但是方法和字段呢?是的,我认为您非常正确地理解了我的问题。
-
恐怕导出机制在包级别起作用。引用上面链接的 sotms:“因此,即使一个类型被声明为 public,如果它的包没有在其模块的声明中导出,那么它只能被该模块中的代码访问。跨模块边界引用的方法或字段是如果它的封闭类型在这个意义上是可访问的,并且如果成员本身的声明也允许访问,则可以访问。"
-
我宁愿不写任何东西,因为它还没有发布,也没有办法判断当前的功能是否会被发布。但是你可以关注 jigsaw-dev 上的讨论。参见例如this thread。
标签: java access-modifiers java-9 java-platform-module-system