Новости Java #21

• JDK 17 перешёл в первую фазу Rampdown. Это значит, что JDK 17 форкнут в отдельный стабилизационный репозиторий, и в релиз больше не будут приниматься никакие новые JEP'ы.

Кроме того, стало известно, что JEP 406: Pattern Matching for switch (Preview) был интегрирован в Java 17 и попал в последнюю сборку JDK 17-ea+26.

Также вышла первая сборка JDK 18-ea+1.

• Вышел новый черновик JEP: Universal Generics (Preview). Это очередной JEP по проекту Valhalla, и в нём предлагается расширить пространство всех переменных типов в дженериках до всех типов, то есть не только ссылочных типов, но и примитивных типов значений. Это означает, что для компилятора Java больше не будет ошибкой, если указать примитивы в качестве типов-параметров (например, List<int>). При этом, если в generic коде переменной типа будет присвоен null, то компилятор будет выдавать предупреждение:

class C<T> {
    T x = null; // warning: null assignment
}

Таким образом, компилятор предупреждает разработчика о том, что может произойти null-загрязнение, то есть если переменная T окажется value-типом, то в ней будет находиться несовместимое значение, что в дальнейшем может привеcти к NullPointerException:

C<Point> c = new C<Point>();
Point p = c.x; // NPE

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

Важно отметить, что в данном JEP речи о специализации дженериков времени выполнения пока не идёт, и дженерики будут продолжать компилироваться в байткод через стирание типов (erasure), то есть во время выполнения дженерики с value-типами будут работать как ссылочные типы. JEP про специализацию будет опубликован в будущем.

• У инструмента jar, который входит в состав JDK, появилась новая опция --validate. Она служит для валидации multi-release JAR-файлов: делает анализ экспортированных API для каждой из декларированных версий Java и проверяет, что они согласованны. Такой анализ проводился и ранее при создании или обновлении JAR-файлов, но теперь его можно выполнить отдельным действием.

• В блоге JetBrains вышел Java Annotated Monthly за июнь 2021.

• Вышел Spring Framework 5.3.8.

• Вышел Gradle 7.1.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2021
Feed