requires e exports
Controllare dipendenze e visibilità
requires e exports è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.
Controllare il grafo dei moduli
Due direttive definiscono il grafo dei moduli: requires dichiara da cosa dipende il modulo, mentre exports dichiara cosa espone.
Questa lezione esamina le loro varianti e le regole di leggibilità e accessibilità che ne derivano.
requires semplice
Un semplice requires X; significa «questo modulo legge il modulo X». Il codice può usare i tipi pubblici esportati da X, ma i consumer del suo modulo non ricavano alcuna informazione su X.
module com.example.app {
requires java.sql;
}requires transitive
requires transitive Y; significa che qualsiasi modulo che legge il suo modulo legge anche Y. Si tratta della leggibilità implicita, utile quando la sua API espone i tipi di Y.
module com.example.api {
requires transitive java.sql;
}Quando usare transitive
Usi transitive quando un metodo della sua API esportata restituisce o accetta un tipo di un altro modulo. Altrimenti i chiamanti non potrebbero nemmeno indicare il tipo restituito senza un proprio requires.
In questo modo si risparmia ai consumer la dichiarazione di dipendenze ridondanti.
requires static
requires static Z; dichiara una dipendenza solo in fase di compilazione. Il modulo è necessario per compilare, ma è facoltativo a runtime: è perfetto per i processori di annotazioni o per le integrazioni opzionali.
module com.example.app {
requires static com.example.annotations;
}exports semplice
exports pkg; rende i tipi pubblici di pkg leggibili da tutti i moduli che richiedono il suo modulo.
module com.example.lib {
exports com.example.lib.api;
}exports qualificato
Un export qualificato espone un package solo a specifici moduli denominati, usando exports pkg to modA, modB;. È utile per i moduli amici all'interno di un sistema più ampio.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}opens per la reflection
exports concede accesso in compilazione e a runtime ai membri pubblici. La reflection profonda (campi privati) richiede invece opens pkg;, usato da framework come Jackson o Hibernate.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}Moduli open
Se un intero modulo necessita di accesso tramite reflection, come accade spesso con i framework legacy, lo si dichiara open. Ogni package viene quindi aperto alla reflection, anche se i normali exports continuano a controllare l'accesso in compilazione.
open module com.example.beans {
requires java.logging;
}Leggibilità e accessibilità
Per usare il tipo di un altro modulo, devono essere vere entrambe le condizioni:
- Leggibilità: il suo modulo include
requiresper l'altro - Accessibilità: il modulo dell'altro esporta il package e il tipo è pubblico
Se ne manca una, il compilatore rifiuta il codice.
Unire i concetti
Un modulo ben formato che riesporta i tipi JDBC e apre le entità a una libreria 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;
}Verifica rapida
Scelga la direttiva per i tipi dell'API riesportati.
Riepilogo
Ha appreso le direttive per le dipendenze e la visibilità:
requires,requires transitive,requires staticexportseexports ... toqualificatoopenseopen moduleper la reflection- L'uso richiede sia leggibilità sia accessibilità
Successivo: disaccoppiamento tramite servizi con provides e uses.
Domande Frequenti
La lezione «requires e exports» è gratuita?
Sì — il testo completo di «requires e exports» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.
Cosa imparerò in «requires e exports»?
Controllare dipendenze e visibilità Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Java Academy?
Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «requires e exports»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Java Academy?
Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- module-info.java
- requires e exports
- Servizi con provides/uses
- Migrazione ai moduli