requires og exports
Styr afhængigheder og synlighed
requires og exports er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.
Styring af modulgrafen
To direktiver former modulgrafen: requires erklærer, hvad du er afhængig af, og exports erklærer, hvad du afslører.
I denne lektion udforsker du deres varianter og de regler for læsbarhed og tilgængelighed, som de skaber.
Almindelig requires
En simpel requires X; betyder, at „dette modul læser modul X“. Din kode kan bruge X’s eksporterede offentlige typer, men forbrugere af dit modul får ingen oplysninger om X.
module com.example.app {
requires java.sql;
}requires transitive
requires transitive Y; betyder, at ethvert modul, der læser dig, også læser Y. Dette er implicit læsbarhed, som er nyttig, når din API eksponerer Y’s typer.
module com.example.api {
requires transitive java.sql;
}Hvornår du skal bruge transitive
Brug transitive, når en metode i din eksporterede API returnerer eller modtager en type fra et andet modul. Ellers kan kaldende kode ikke engang angive returtypen uden sin egen requires.
Det sparer forbrugere for at erklære overflødige afhængigheder.
requires static
requires static Z; erklærer en afhængighed, der kun gælder ved kompilering. Modulet er nødvendigt for at kompilere, men er valgfrit under kørsel, hvilket er perfekt til annoteringsprocessorer eller valgfrie integrationer.
module com.example.app {
requires static com.example.annotations;
}Almindelig exports
exports pkg; gør de offentlige typer i pkg læsbare for alle moduler, der kræver dit modul.
module com.example.lib {
exports com.example.lib.api;
}Kvalificeret exports
En kvalificeret eksport afslører en pakke kun for bestemte navngivne moduler ved hjælp af exports pkg to modA, modB;. Det er nyttigt for venne-moduler i et større system.
module com.example.core {
exports com.example.core.internal to com.example.web, com.example.batch;
}opens til refleksion
exports giver adgang til offentlige medlemmer både ved kompilering og under kørsel. Dyb refleksion (private felter) kræver i stedet opens pkg;, som bruges af rammeværker som Jackson eller Hibernate.
module com.example.model {
exports com.example.model;
opens com.example.model.entities to com.fasterxml.jackson.databind;
}open-moduler
Hvis et helt modul har brug for refleksionsadgang, hvilket er almindeligt med ældre rammeværker, skal du erklære det som open. Så er alle pakker åbne for refleksion, selvom almindelig exports stadig styrer adgangen ved kompilering.
open module com.example.beans {
requires java.logging;
}Læsbarhed kontra tilgængelighed
To betingelser skal begge være opfyldt for at bruge en type fra et andet modul:
- Læsbarhed: dit modul
requiresderes modul - Tilgængelighed: deres modul
exportspakken, og typen er offentlig
Hvis én af dem mangler, afviser kompileren din kode.
Samlet eksempel
Et korrekt udformet modul, der geneksponerer JDBC-typer og åbner entiteter for et JSON-bibliotek:
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;
}Hurtigt tjek
Vælg direktivet for geneksponerede API-typer.
Opsummering
Du har lært direktiverne for afhængigheder og synlighed:
requires,requires transitive,requires staticexportsog kvalificeretexports ... toopensogopen moduletil refleksion- Brug kræver både læsbarhed og tilgængelighed
Næste: afkobling med tjenester via provides og uses.
Lær Java med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 104
- Lektioner
- 374
Ofte stillede spørgsmål
Er lektionen “requires og exports” gratis?
Ja — hele teksten til “requires og exports” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “requires og exports”?
Styr afhængigheder og synlighed Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Java Academy?
Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “requires og exports”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Java Academy-lektion?
Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- module-info.java
- requires og exports
- Services med provides/uses
- Migrering til moduler