Java Language
Moduły
Szukaj…
Składnia
- wymaga java.xml;
- wymaga publicznego pliku java.xml; # udostępnia moduł osobom zależnym do użytku
- eksportuje com.example.foo; # osoby na utrzymaniu mogą używać typów publicznych w tym pakiecie
- eksportuje com.example.foo.impl do com.example.bar; # ogranicz użycie do modułu
Uwagi
Korzystanie z modułów jest zalecane, ale nie wymagane, pozwala to na kontynuowanie pracy istniejącego kodu w Javie 9. Pozwala także na stopniowe przejście do kodu modułowego.
Każdy niemodułowy kod jest umieszczany w nienazwanym module podczas kompilacji. Jest to specjalny moduł, który może używać typów ze wszystkich innych modułów, ale tylko z pakietów, które mają deklarację exports
.
Wszystkie pakiety w nienazwanym module są eksportowane automatycznie.
Słowa kluczowe, np. module
itp ..., są ograniczone w użyciu w deklaracji modułu, ale mogą być nadal używane jako identyfikatory gdzie indziej.
Definiowanie podstawowego modułu
Moduły są zdefiniowane w pliku o nazwie module-info.java
, o nazwie deskryptor modułu. Powinien zostać umieszczony w katalogu głównym kodu źródłowego:
|-- module-info.java
|-- com
|-- example
|-- foo
|-- Foo.java
|-- bar
|-- Bar.java
Oto prosty deskryptor modułu:
module com.example {
requires java.httpclient;
exports com.example.foo;
}
Nazwa modułu powinna być unikalna i zaleca się stosowanie tej samej notacji nazewnictwa odwrotnego DNS , jakiej używają pakiety, aby to zapewnić.
Moduł java.base
, który zawiera podstawowe klasy Javy, jest domyślnie widoczny dla każdego modułu i nie musi być dołączany.
requires
deklaracja pozwala nam korzystać z innych modułów, na przykład moduł java.httpclient
jest importowana.
Moduł może również określić, które pakiety exports
a zatem czyni go widocznym dla innych modułów.
Pakiet com.example.foo
zadeklarowany w klauzuli exports
będzie widoczny dla innych modułów. Wszelkie paczki z com.example.foo
nie zostaną wyeksportowane, potrzebują własnych deklaracji export
.
I odwrotnie, com.example.bar
który nie jest wymieniony w klauzulach dotyczących exports
, nie będzie widoczny dla innych modułów.