2017-08-24 63 views
3

我正在閱讀jdk.accessibility的API文檔,並注意到它將所有這些分開列出。Java9中的出口,間接出口,需求和間接需求之間的區別?

  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作爲要求或間接要求或間接出口。這裏不一致的原因是什麼?

尋找這些差異的例子,可以幫助理解(2)中發生了什麼,以及我們如何使用Java9來適應模塊結構。

回答

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.desktop作爲transitive,也是如此。

+1

沒有提到作爲一個包是我的意思。 http://download.java.net/java/jdk9/docs/api/jdk.accessibility-summary.html – nullpointer

+2

我已經用信息更新了答案,因爲我理解這個問題。如果模塊A「將sun.awt導出到B」,則B的客戶端無法看到「sun.awt」,即使B在A上「需要傳遞」。 –

相關問題