✅ Импорт модулей в Java 25

JDK 25
JDK 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.

47 views·3 shares