2017-08-24 4 views
3

Je parcourais les documents de l'API pour jdk.accessibility et j'ai remarqué qu'il énumère tous ces documents séparément.Différence entre les exportations, les exportations indirectes, requises et indirectes Nécessite Java9?

  1. Les modules ayant une portée requires dans un module sont de tous les modules requis consommaient indirect?

  2. Le module-info.java du module est la suivante:

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

    et java.desktop est quelque chose comme (en essayant d'inclure différents -

    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; 
    

    Mais la doc pour jdk.accessibility ne mentionne pas sun.awt comme Requis ou Indirect Requiert ou Exportations Indirectes Quelle est la raison de l'incohérence ici?

En cherchant des exemples de la différence entre ceux qui peuvent aider à comprendre ce qui se passe dans (2) et ce qui doit être suivi comme une pratique pour nous adapter à la structure du module en utilisant Java9.

Répondre

5

Notez que dans:

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

que sun.awt est un paquet, pas un nom de module. (Here est un autre exemple.) Il est donc logique que sun.awt ne soit pas mentionné dans le document, car java.desktop est déjà cité.

Editer: Notez également que pour les clients du module jdk.accessibility, le package sun.awt n'est pas accessible. Autrement dit, il est exporté par java.desktoppour être utilisé parjdk.accessibility mais ne fait pas partie de son API. J'ai confirmé (example here) que ceci est vrai même si jdk.accessibility exige java.desktop comme transitive.

+1

Non mentionné comme un paquet est ce que je voulais dire. http://download.java.net/java/jdk9/docs/api/jdk.accessibility-summary.html – nullpointer

+2

J'ai mis à jour la réponse avec des informations telles que je comprends la question. Si un module A "exporte sun.awt vers B" alors les clients de B ne peuvent pas voir "sun.awt", même si B "requiert transitive" sur A. –