Java9中的出口,间接出口,需求和间接需求之间的差异?

时间:2017-08-24 13:09:11

标签: java-9 access-specifier

我正在查看jdk.accessibility的API文档,并注意到它会单独列出所有这些文档。

  1. 一个模块中范围为requires的模块都在消耗模块的间接需求

  2. 模块的module-info.java如下:

    module jdk.accessibility {
        requires transitive java.desktop;
    
        exports com.sun.java.accessibility.util;
    }
    

    java.desktop类似(试图包括变化 -

    module java.desktop {
        ...
        requires java.prefs;
        ...
        requires transitive java.xml;
        exports java.applet;
        ...
        exports sun.awt to
            javafx.swing,
            jdk.accessibility,
            oracle.desktop;
        opens javax.swing.plaf.basic to jdk.jconsole;
        ...
        uses javax.sound.sampled.spi.MixerProvider;
        ...
        provides javax.sound.sampled.spi.MixerProvider with
            com.sun.media.sound.DirectAudioDeviceProvider,
            com.sun.media.sound.PortMixerProvider;
    

    但是jdk.accessibility的文档没有将sun.awt提及为“需要”或“间接需求”或“间接导出”。这里出现不一致的原因是什么?

  3. 寻找可以帮助理解(2)中发生的事情的这些差异的示例,以及我们应该遵循什么来使用Java9来适应模块结构。

1 个答案:

答案 0 :(得分:5)

请注意:

module java.desktop {
    ...
    ...
    exports sun.awt to
        javafx.swing,
        jdk.accessibility,
        oracle.desktop;
}

sun.awt是一个包,而不是模块名称。 (Here是另一个例子。)因此,文档中不会提及sun.awt,因为java.desktop已被引用。

修改另请注意,对于jdk.accessibility模块的客户端,无法访问sun.awt包。也就是说,它由java.desktop 导出以供 jdk.accessibility使用,但不会成为其API的一部分。我已确认(example here)即使jdk.accessibility要求java.desktoptransitive,也是如此。