✅ Импорт модулей в Java 25
Ещё одним нововведением в языке программирования Java в грядущем релизе JDK 25 является импорт модулей (JEP 511). Ещё в JDK 9 была реализована система модулей платформы Java (JPMS - Java Platform Module System), а классы стандартной библиотеки были распределены между различными модулями. Однако это никак не повлияло на написание кода, а вся работа с JPMS сводилась к файлу module-info.java.
Теперь же с 25 версии языка программирования Java появится возможность импорта не только отдельных классов или классов, находящихся в одном пакете, а всех публичных классов определённого модуля.
В следующем примере кода импортируется четыре класса из пакета java.util и его подпакетов:
package example;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
class Application {
static final Predicate<Integer> IS_EVEN = i -> i % 2 == 0;
static final Function<Integer, String> INT_TO_STRING = Object::toString;
static void main() {
String numbers = List.of(1, 2, 3, 4, 5, 6)
.stream()
.filter(IS_EVEN)
.map(INT_TO_STRING)
.collect(Collectors.joining(", "));
}
}Вместо этого можно импортировать модуль java.base, который экспортирует вышеуказанные пакеты. Для этого нужно использовать специальный оператор import module:
package example; import module java.base; class Application { static final Predicate<Integer> IS_EVEN = i -> i % 2 == 0; static final Function<Integer, String> INT_TO_STRING = Object::toString; static void main() { String numbers = List.of(1, 2, 3, 4, 5, 6) .stream() .filter(IS_EVEN) .map(INT_TO_STRING) .collect(Collectors.joining(", ")); } }
С полным списком экспортируемых пакетов модулем java.base можно ознакомиться в документации.
Однако, стоит помнить, что разные модули могут экспортировать классы с одним и тем же названием. Так, например, java.base и java.desktop экспортируют класс List. В этом случае нужно конкретизировать, какой класс нужно импортировать:
package example;
// экспортирует java.util.List
import module java.base;
// экспортирует java.awt.List
import module java.desktop;
import java.util.List;
class Application {
static void main() {
List.of(1, 2, 3, 4);
}
}Обратите своё внимание на то, что при импорте модулей не требуется использовать JPMS в проекте и настраивать файл module-info.java.
