Java Language
moduli
Ricerca…
Sintassi
- richiede java.xml;
- richiede java.xml pubblico; # espone il modulo ai dipendenti per l'uso
- esporta com.example.foo; # dipendenti possono utilizzare tipi pubblici in questo pacchetto
- esporta com.example.foo.impl in com.example.bar; # limita l'utilizzo a un modulo
Osservazioni
L'uso di moduli è incoraggiato ma non richiesto, ciò consente al codice esistente di continuare a lavorare in Java 9. Consente inoltre una transizione graduale al codice modulare.
Ogni codice non modulare viene inserito in un modulo senza nome quando viene compilato. Questo è un modulo speciale che è in grado di utilizzare i tipi da tutti gli altri moduli ma solo dai pacchetti che hanno una dichiarazione di exports
.
Tutti i pacchetti nel modulo senza nome vengono esportati automaticamente.
Le parole chiave, ad esempio il module
ecc., Sono limitate in uso all'interno della dichiarazione del modulo, ma possono essere utilizzate come identificatori altrove.
Definire un modulo base
I moduli sono definiti in un file denominato module-info.java
, denominato descrittore di modulo. Dovrebbe essere inserito nella root del codice sorgente:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Ecco un semplice descrittore di modulo:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
Il nome del modulo deve essere univoco e si consiglia di utilizzare la stessa notazione di denominazione DNS inversa utilizzata dai pacchetti per garantire ciò.
Il modulo java.base
, che contiene le classi base di Java, è implicitamente visibile a qualsiasi modulo e non ha bisogno di essere incluso.
La dichiarazione dei requires
ci consente di utilizzare altri moduli, nell'esempio il modulo java.httpclient
viene importato.
Un modulo può anche specificare quali pacchetti exports
e quindi renderli visibili ad altri moduli.
Il pacchetto com.example.foo
dichiarato nella clausola exports
sarà visibile ad altri moduli. Eventuali sotto-pacchetti di com.example.foo
non verranno esportati, avranno bisogno delle proprie dichiarazioni di export
.
Al contrario, com.example.bar
che non è elencato nelle clausole di exports
non sarà visibile ad altri moduli.