Java Language
moduler
Sök…
Syntax
- kräver java.xml;
- kräver public java.xml; # exponerar modulen för beroende för användning
- exporterar com.example.foo; # beroende kan använda offentliga typer i detta paket
- exporterar com.example.foo.impl till com.example.bar; # begränsa användningen till en modul
Anmärkningar
Användning av moduler uppmuntras men krävs inte, detta gör att befintlig kod kan fortsätta arbeta i Java 9. Det möjliggör också en gradvis övergång till modulkod.
Alla icke-modulära koder läggs i en namngiven modul när den sammanställs. Detta är en speciell modul som kan använda typer från alla andra moduler men endast från paket som har en exports
.
Alla paket i den namngivna modulen exporteras automatiskt.
Nyckelord, t.ex. module
etc. ..., är begränsade i användning i moduldeklarationen men kan fortsätta att användas som identifierare på annat håll.
Definiera en grundmodul
Moduler definieras i en fil med namnet module-info.java
, benämnd en modulbeskrivning. Det bör placeras i källkodsroten:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Här är en enkel modulbeskrivning:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
Modulnamnet ska vara unikt och det rekommenderas att du använder samma Reverse-DNS-namnnotation som används av paket för att säkerställa detta.
Modulen java.base
, som innehåller Java: s basklasser, är implicit synlig för alla moduler och behöver inte inkluderas.
Den requires
deklarationen tillåter oss att använda andra moduler, i exemplet är modulen java.httpclient
importerad.
En modul kan också specificera vilka paket den exports
och därför gör den synlig för andra moduler.
Paketet com.example.foo
deklareras i exports
klausulen kommer att vara synlig för andra moduler. Alla com.example.foo
från com.example.foo
kommer inte att exporteras, de behöver sina egna export
.
Omvänt com.example.bar
som inte finns med i exports
kommer klausuler inte vara synliga för andra moduler.