• 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.