Java 9: новые возможности и инструменты для разработчиков

Java 9 - долгожданный релиз популярной платформы программирования Java. Это издание включает множество новых возможностей и инструментов, которые сделают разработку на Java еще более удобной и эффективной.

Модульная система Java

Одним из ключевых нововведений Java 9 является внедрение модульной системы. Это часть большого проекта Jigsaw, цель которого - разбить монолитную структуру Java на отдельные модули.

Модуль в Java 9 - это цовокупноцть пакетов и ресурсов, имеющих уникальное имя (identifier). Каждый модуль капсулирует свой код и данные, экспортируя только выбранные пакеты.

Модульная система решает проблемы монолитности Java, позволяя компоновать приложения из небольших частей.

Рассмотрим пример определения простого модуля:

module my.module { exports my.package; }

Здесь мы экспортируем пакет my.package, сделав его доступным извне. Остальные пакеты инкапсулированы внутри модуля.

Ключевые преимущества:

  • Инкапсуляция внутренних API
  • Лучшее структурирование кода
  • Ускорение загрузки приложений

Помимо собственных модулей, разработчик получает доступ к 92 модулям JDK 9. Обновленная модульная структура JDK является еще одним важным нововведением этого релиза.

Помимо архитектурных изменений, в Java 9 появилось немало удобных возможностей на уровне языка.

Командная работа программистов

JShell

JShell - это интерактивная JavaScript-подобная среда (REPL) для тестирования кода Java прямо в консоли.

jshell> int x = 15; x ==> 15 jshell> String message = "Hello"; message ==> "Hello" jshell> System.out.println(message); Hello 

JShell позволяет быстро протестировать работу отдельных конструкций, не создавая полноценных классов и методов.

Неизменяемые коллекции

Теперь список, множество и словарь можно легко сделать неизменяемыми вызовом статических методов List.of(), Set.of(), Map.of():

List<String> list = List.of("foo", "bar"); Set<Integer> set = Set.of(1, 2, 3); Map<String, Integer> map = Map.of("a", 1, "b", 2);

Это избавляет от необходимости использовать громоздкий Collections.unmodifiableXXX().

Кроме того, в интерфейсах теперь можно объявлять private методы, появился diamond оператор для анонимных классов и многое другое.

Реактивное программирование

Еще одним важным нововведением в Java 9 стала поддержка реактивного подхода к разработке приложений. Реактивное программирование подразумевает создание отзывчивых, масштабируемых систем, которые эффективно работают в условиях высокой нагрузки.

Для реализации реактивных приложений на Java введен новый API - Reactive Streams. В его состав входят несколько ключевых интерфейсов:

  • Flow.Publisher
  • Flow.Subscriber
  • Flow.Processor

Рассмотрим их использование на примере:

// Публикатор создает поток чисел Flow.Publisher<Integer> publisher = new MyNumberPublisher(); // Подписчик получает числа и обрабатывает их Flow.Subscriber<Integer> subscriber = new MyNumberSubscriber(); // Организуем поток данных от издателя к подписчику publisher.subscribe(subscriber);

Publisher и Subscriber взаимодействуют асинхронно через неблокирующие вызовы. Это позволяет добиться высокой производительности и масштабируемости.

Улучшения API CompletableFuture

Дополнительные улучшения коснулись и библиотеки CompletableFuture, используемой для асинхронного программирования.

Теперь есть возможность задать таймауты и задержки для асинхронных операций. Например:

// Задержка на 1 секунду перед выполнением CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> "Hello") .thenApply(s -> s + " World!") .delay(1, TimeUnit.SECONDS); // Таймаут операции в 500 мс future.orTimeout(500, TimeUnit.MILLISECONDS); 

Это существенно расширяет возможности библиотеки.

Офисное здание на фоне заката

Создание параллельных приложений

Благодаря Flow API и усовершенствованиям CompletableFuture, Java 9 предоставляет отличные средства для создания высокопроизводительных параллельных систем.

Асинхронные потоки данных и задачи можно легко масштабировать на многоядерных системах, эффективно загружая все доступные вычислительные мощности.

Java 9 открывает новую эру в разработке отзывчивых enterprise-приложений.

Улучшения в Stream API

Популярный Stream API также получил ряд улучшений в Java 9:

  • Метод takeWhile для обрыва потока по условию
  • Метод dropWhile для пропуска элементов по условию
  • Перегруженные версии ofNullable

Например, takeWhile позволяет легко реализовать выборку элементов потока до первого совпадения:

Stream.of(1, 2, 3, 4) .takeWhile(n -> n < 3) .forEach(System.out::println);

В результате будут напечатаны числа 1 и 2.

Поддержка HTTP/2

В Java 9 реализован новый HTTP-клиент, поддерживающий современный протокол HTTP/2. Основные преимущества HTTP/2:

  • Более быстрая загрузка страниц
  • Мультиплексирование запросов
  • Сжатие заголовков
  • Пуш-уведомления от сервера

Использование HTTP/2 клиента в Java 9:

var client = HttpClient.newHttpClient(); var request = HttpRequest.newBuilder() .uri(URI.create("https://example.com/")) .build(); HttpResponse<String> response = client.send(request, BodyHandlers.ofString());

API отзывчивых изображений

Еще одно полезное нововведение - API для работы с отзывчивыми изображениями. Оно позволяет загружать и отображать изображения в соответствии с разрешением и размерами устройства.

Это упрощает создание кросс-платформенных приложений и адаптивных веб-сайтов под мобильные устройства.

Статья закончилась. Вопросы остались?
Комментарии 0
Подписаться
Я хочу получать
Правила публикации
Редактирование комментария возможно в течении пяти минут после его создания, либо до момента появления ответа на данный комментарий.