requires et exports
Contrôlez les dépendances et la visibilité
requires et exports est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
Contrôler le graphe des modules
Deux directives façonnent le graphe des modules : requires déclare ce dont vous dépendez, et exports déclare ce que vous révélez.
Cette leçon explore leurs variantes ainsi que les règles de lisibilité et d’accessibilité qu’elles créent.
Dépendance simple
Un simple requires X; signifie « ce module lit le module X ». Votre code peut utiliser les types publics exportés par X, mais les utilisateurs de votre module n’apprennent rien sur X.
module com.example.app {
requires java.sql;
}Dépendance transitive
requires transitive Y; signifie que tout module qui vous lit lit également Y. Il s’agit de la lisibilité implicite, utile lorsque votre interface de programmation expose les types de Y.
module com.example.api {
requires transitive java.sql;
}Quand utiliser la transitivité
Utilisez la transitivité lorsqu’une méthode de votre interface de programmation exportée renvoie ou accepte un type provenant d’un autre module. Sinon, les appelants ne pourraient même pas nommer le type de retour sans leur propre directive de dépendance.
Cela évite aux utilisateurs de déclarer des dépendances redondantes.
Dépendance statique
requires static Z; déclare une dépendance limitée à la compilation. Le module est nécessaire pour compiler, mais facultatif à l’exécution, ce qui convient parfaitement aux processeurs d’annotations ou aux intégrations facultatives.
module com.example.app {
requires static com.example.annotations;
}Exportation simple
exports pkg; rend les types publics de pkg lisibles par tous les modules qui dépendent du vôtre.
module com.example.lib {
exports com.example.lib.api;
}Exportation qualifiée
Une exportation qualifiée expose un paquet uniquement à des modules nommés précis au moyen de exports pkg to modA, modB;. Elle est utile pour les modules amis au sein d’un système plus vaste.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}Ouvrir pour la réflexion
exports accorde l’accès à la compilation et à l’exécution aux membres publics. La réflexion approfondie (champs privés) nécessite plutôt opens pkg;, utilisé par des infrastructures comme Jackson ou Hibernate.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}Modules ouverts
Si un module entier a besoin d’un accès par réflexion (cas fréquent avec les infrastructures anciennes), déclarez-le open. Chaque paquet est alors ouvert à la réflexion, bien que les exports normaux contrôlent toujours l’accès à la compilation.
open module com.example.beans {
requires java.logging;
}Lisibilité contre accessibilité
Deux conditions doivent être réunies pour utiliser le type d’un autre module :
- Lisibilité : votre module a une directive
requiresvers le sien - Accessibilité : son module exporte le paquet et le type est public
Si l’une des deux conditions manque, le compilateur rejette votre code.
Mise en pratique
Un module correctement formé qui réexporte les types JDBC et ouvre les entités pour une bibliothèque JSON :
module com.example.service {
requires transitive java.sql;
requires static com.example.annotations;
exports com.example.service.api;
exports com.example.service.spi to com.example.plugins;
opens com.example.service.dto to com.fasterxml.jackson.databind;
}Vérification rapide
Choisissez la directive pour les types d’interface de programmation réexportés.
Récapitulatif
Vous avez appris les directives de dépendance et de visibilité :
requires,requires transitive,requires staticexportsetexports ... toqualifiéopensetopen modulepour la réflexion- L’utilisation nécessite à la fois la lisibilité et l’accessibilité
Ensuite : découplage grâce aux services avec les directives de fourniture et d’utilisation.
Questions Fréquemment Posées
La leçon « requires et exports » est-elle gratuite ?
Oui — le texte complet de « requires et exports » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « requires et exports » ?
Contrôlez les dépendances et la visibilité Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « requires et exports » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- module-info.java
- requires et exports
- Services avec provides/uses
- Migrer vers les modules