Технологии 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"); }