Технологии Java
Модули
/** Javadoc */
[@Annotations]
[open] module имя.модуля {
определения
}
requires [transitive] [static] имя.модуля;
module info.kgeorgiy.java.base {
requires transitive junit;
}
module info.kgeorgiy.java.implementor {
requires java.compiler;
requires info.kgeorgiy.java.base;
}
exports имя.пакета [to модуль1, модуль2, ...];
module info.kgeorgiy.java.base {
exports info.kgeorgiy.java.base;
exports info.kgeorgiy.java.base.test
to info.kgeorgiy.java.test;
}
opens имя.пакета [to модуль1, модуль2, ...];
module info.kgeorgiy.java.base {
opens info.kgeorgiy.java.base.opened;
opens info.kgeorgiy.java.base.test
to info.kgeorgiy.java.test;
}
public interface HelloService {
void sayHello(final String to);
}
public class HelloServiceEn implements HelloService {
public void sayHello(final String to) {
System.out.format(" Hello, %s%n", to);
}
}
public class HelloServiceFr {
public static HelloService provider() {
return to -> System.out.format(" Bonjour, %s%n", to);
}
}
provides имя.класса.сервиса
with реализация.1[, реализация.2]*;
module i.k.j.helloModule {
exports i.k.j.helloModule.service;
provides i.k.j.helloModule.service.HelloService with
i.k.j.helloModule.service.HelloServiceEn,
i.k.j.helloModule.service.HelloServiceFr;
}
uses имя.класса.сервиса;
module i.k.j.testModule {
requires i.k.j.helloModule;
uses i.k.j.helloModule.service.HelloService;
}
ServiceLoader<HelloService> loader
= ServiceLoader.load(HelloService.class);
for (HelloService service : loader) {
service.sayHello("Main");
}