4 votes

Comment les directives du module Java influencent-elles l'accès à la réflexion dans un module ?

Selon https://www.oracle.com/corporate/features/understanding-java-9-modules.html le système de module Java introduit les directives suivantes :

  • exportations, exportations ... vers
  • utilise
  • fournit ... avec
  • ouvre, ouvre, ouvre ... à

Quel est l'impact (le cas échéant) de chaque directive sur un module externe accédant à des membres internes en utilisant la réflexion ?

Par exemple, est-ce que exports <package> permettre aux modules externes d'accéder à tous les public , protected , private membres du paquet exporté en utilisant la réflexion ? Qu'en est-il des autres directives ?

4voto

nullpointer Points 1135

Je citerai simplement le #JLS7.7 ici (formaté et catégorisé par moi) :

Distincte de l'accès au moment de la compilation et de l'accès au moment de l'exécution, la plate-forme Java SE fournit (§1.4) .

Pour répondre à votre question, il faut classer le module Normal ( module foo ) et le module Open ( open module bar ) :

Module normal

A module normal subventions réfléchies a les paquets qui sont explicitement exportés ou explicitement ouverts. (ou les deux).

  • les paquets exportés du module ( exports com.example.foo.bar )

    Pour code en dehors d'un module normal l'accès réfléchi accordé à types dans les paquets exportés (et non ouverts) du module est spécifiquement à la public y protected ty p e le site public y protected membres de ces types.

  • les paquets ouverts du module ( opens com.example.foo.internal to com.example.bar )

    T accordé aux types dans les paquets ouverts du module (exportés ou non) est de non) est tous les types dans ces packs types .

    Aucun accès réfléchi n'est accordé paquets qui ne sont pas exportés ou ouverts .

  • à l'intérieur d'un module

    Le code à l'intérieur du module bénéficie d'un accès réfléchi à tous les types, et a paquets du module .

Module ouvert

Un site module ouvert accorde un accès réfléchi t paquets, comme si tous les paquets avaient été ouverts .

  • les paquets ouverts du module

    Pour le code à l'extérieur d'un module ouvert l'accès réfléchi accordé aux dans les paquets ouverts du module (c'est-à-dire, tous les paquets du module module) est à tous les types de ces paquets types .

  • à l'intérieur d'un module

    Code à l'intérieur du module bénéficie d'un accès réfléchi t et tous leurs membres, dans tous les paquets du module .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X