Java Language
modules
Zoeken…
Syntaxis
- vereist java.xml;
- vereist openbaar java.xml; # stelt module bloot aan afhankelijken voor gebruik
- exporteert com.example.foo; # afhankelijke personen kunnen openbare typen in dit pakket gebruiken
- exporteert com.example.foo.impl naar com.example.bar; # gebruik beperken tot een module
Opmerkingen
Het gebruik van modules wordt aangemoedigd, maar is niet vereist, hierdoor kan bestaande code in Java 9 blijven werken. Het maakt ook een geleidelijke overgang naar modulaire code mogelijk.
Elke niet-modulaire code wordt in een naamloze module geplaatst wanneer deze wordt gecompileerd. Dit is een speciale module die typen van alle andere modules kan gebruiken, maar alleen van pakketten met een exports
.
Alle pakketten in de naamloze module worden automatisch geëxporteerd.
Sleutelwoorden, bijv. module
enz., Zijn beperkt in gebruik binnen de moduleaangifte maar kunnen elders als identificatiemiddelen worden gebruikt.
Een basismodule definiëren
Modules worden gedefinieerd in een bestand met de naam module-info.java
, een modulebeschrijving genoemd. Het moet in de broncode root worden geplaatst:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Hier is een eenvoudige modulebeschrijving:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
De modulenaam moet uniek zijn en het wordt aanbevolen dat u dezelfde Reverse-DNS-naamnotatie gebruikt als die door pakketten wordt gebruikt om dit te helpen garanderen.
De module java.base
, die de basisklassen van Java bevat, is impliciet zichtbaar voor elke module en hoeft niet te worden opgenomen.
De requires
verklaring stelt ons in staat om andere modules te gebruiken, in het voorbeeld is de module java.httpclient
geïmporteerd.
Een module kan ook specificeren welke pakketten het exports
en maakt het daarom zichtbaar voor andere modules.
Het pakket com.example.foo
in de aangegeven exports
clausule zichtbaar voor andere modules. com.example.foo
van com.example.foo
worden niet geëxporteerd, ze hebben hun eigen export
nodig.
Omgekeerd com.example.bar
die niet wordt vermeld exports
zal clausules niet zichtbaar voor andere modules.