
Java 15 — что нового?
Содержание статьи:
Каждые полгода выходит новая версия. Java 15 — это еще одна версия, отличная от LTS, что означает, что она будет поддерживаться еще шесть месяцев. Так что же нового в Java 15?
Текстовые блоки
В двух предыдущих версиях эта функция находилась в фазе preview. Теперь она включена по умолчанию (JEP 378). Текстовые блоки предлагают разработчикам возможность создавать многострочные литералы, где вам не нужно использовать escape-символы для форматирования текста. Текстовые блоки будут содержать между символами «»»

На практике это выглядит так:
String literal = """
Lorem ipsum dolor sit amet, \
consectetur adipiscing elit, \
sed do eiusmod tempor incididunt\
""";
Скрытые и запечатанные классы
В Java 15 появляется понятие скрытого класса, то есть класса, который не может быть использован непосредственно байт-кодом другого класса. Это не значит, что такой код не может быть использован вообще.
Скрытые классы можно будет использовать с помощью отражения. Весь механизм предназначен для использования фреймворками, которые создают классы во время выполнения. Эта функция не изменяет язык как таковой, она только расширяет API поиска с помощью метода Lookup :: defineHiddenClass.
Это не новинка, которая будет широко использоваться в повседневном программировании, но если вам это кажется интересным, то стоит взглянуть на описание из JEP 371.
Еще одна новинка, на этот раз preview, — это запечатанные классы (JEP 360). Такие классы и интерфейсы будут ограничивать то, какие другие классы или интерфейсы могут их расширять (или реализовывать). Фактически, идея состоит в том, что автор кода должен контролировать, где должна быть ответственность за реализацию, и, кроме того, иметь возможность ограничивать использование суперклассов.
Новая функция вносит изменения в язык, в документации JEP мы можем найти пример:
package com.example.geometry;
public abstract sealed class Shape
permits Circle, Rectangle, Square {...}
Добавление ключевого слова sealed и затем permits ограничит возможности расширения класса Shape в классы Circle, Rectangle, Square, перечисленные ниже. Классы, перечисленные в permits, должны находиться в одном модуле или пакете (если они входят в безымянный модуль).
Кроме того, в каждом из перечисленных в permits классов необходимо предоставить четкие правила для последующих подклассов.
Есть 3 варианта маркировки таких классов:
- final, что завершает проблему наследования
- sealed, что продолжает тему
- non-sealed, что снимает дополнительные ограничения в создании иерархии классов.
Аналогично обстоит дело с интерфейсами.

Следующая итерация preview-записи и сопоставление с шаблоном
В Java 15 попали две функции, которые помечены как «second preview» (JEP 384) и pattern matching for instanceof (JEP 375).
Записи — это сокращенное обозначение классов, которые служат неизменяемыми контейнерами данных. В версии 15 была разработана интеграция новой функции с концепциями других языков.
Добавлена возможность создания локальных записей, так же, как это можно сделать с локальными классами. Записи также можно использовать с опечатанными интерфейсами — небольшое удобство здесь в том, что записи определены как „final” снизу, что экономит пару нажатий по клавиатуре.
Дальнейшие улучшения также включают добавление методов в Reflection API, которые позволят обрабатывать записи.
Сопоставление шаблонов с instanceof в будущем станет одной из центральных концепций языка, вывод чего можно сделать из количества JEP, в которых упоминается использование этой функции.
В версии 15 практически ничего не изменилось снаружи, но функция была повторно помечена как предварительная версия для сбора дополнительных отзывов.
Сборщик мусора
Было бы странно, если бы в следующем выпуске Java ничего не произошло в области мусора. Из фазы тестирования и экспериментов вышли два сборщика мусора — ZGC (JEP 337) и Shenandoah (JEP 379).
ZGC разработан с учетом сборки мусора с малой задержкой. Представляя его в версии 11, команда разработчиков Java рассчитывала, что время сборки мусора составит менее 10 мс, и в настоящее время ведется работа по сокращению задержки до менее 1 мс.
С тех пор было много улучшений и поддержки для основных платформ (Windows, macOS, Linux на x86_64 и ARM 64).
С другой стороны, Shenandoah фокусируется на выполнении как можно большего количества параллельной работы, благодаря чему он также имеет короткое время сборки мусора, независимо от размера кучи. Как и ZGC, он кроссплатформенный.
Другие новости
В Java была добавлена реализация алгоритма цифровой подписи на основе кривой Эдвардса (JEP 339), или сокращенно EdDSA, который представляет собой алгоритм криптографии с открытым ключом и скрученные кривые Эдвардса.
Это интересный алгоритм подписи, потому что, в отличие от алгоритма эллиптических кривых (ECDSA), он не требует генератора псевдослучайных чисел (что важно, поскольку две подписи ECDSA с одинаковым случайным значением раскрывают закрытый ключ). Реализация соответствует RFC 8032.
В инкубаторе приземлилась еще одна итерация API Foreign-Memory Access (JEP 338), то есть API для безопасного доступа к памяти.
Недавно был реализован DatagramSocket API (JEP 373). Этот API присутствовал в Java с версии 1.0, и его поддержка была головной болью для команды Java. Таким образом, была создана оболочка, которая позволяет использовать новую реализацию и оставить старую, для систем legacy.
И удаление старых вещей
Из Java 15 вылетают:
Движок JavaScript Nashorn (JEP 372), который был помечен как устаревший с Java 11.
Порты для Solaris и Linux на SPARC (и код, специфичный для этих платформ), которые были помечены в Java 14 как устаревшие (JEP 381).
А следующие помечены как устаревшие:
Реализация Activation Remote Object (JEP 385) Biased Locking, то есть в настоящее время мало используемый механизм синхронизации (JEP 374). По умолчанию он будет отключен.
Статьи которые вас заинтересуют:
7 причин почему стоит использовать Spring для работы с REST API на Java

Партнерская программа Где слон?
Вам также может понравиться

Подбираем правильные ключевые слова и зарабатываем на рекламе от Google AdSense
09.10.2020
Как заработать на арбитраже трафика
07.10.2020