• Очередной JEP запланирован в Java 18: Simple Web Server (JEP 408). Про него мы писали в выпуске 13.
• Появился новый черновик JEP: Pattern Matching for switch
(Second Preview). В рассылке начато обсуждение того, что можно улучшить в паттерн-матчинге в следующей версии Java. Перечислим некоторые идеи, которые обсуждаются.
Улучшенная проверка тотальности для дженериков. К примеру, есть иерархия:
sealed interface Foo<T> { } class A<T> implements Foo<T> { } class B<T> implements Foo<T> { } class C implements Foo<String> { }
Тогда при паттерн-матчинге по переменной типа Foo<Integer>
, вариант C
рассматривать не нужно, потому что типы Foo<String>
и Foo<Integer>
несовместимы.
Улучшенный вывод типов при паттерн-матчинге. Сейчас необходимо указывать полный тип:
List<Integer> list = new ArrayList<>(); switch (list) { case ArrayList<Integer> arrayList -> ... ... }
Предлагается разрешить не указывать параметры и дать компилятору выводить их из целевого типа:
case ArrayList arrayList -> ... // Выводится ArrayList<Integer>
Улучшенная проверка покрытия в более сложных случаях:
sealed interface A {} sealed interface B1 extends A {} sealed interface B2 extends A {} sealed interface C extends A {} final class D1 implements B1, C {} final class D2 implements B2, C {} ... int i = switch (arg) { case B1 b1 -> 1; case B2 b2 -> 2; };
В Java 17 такой код не компилируется, хотя switch
покрывает все возможные случаи. Предлагается это исправить.
Добавить частичный порядок между паттернами с условиями и константами. Такой код не должен компилироваться и case
с константой должен быть объявлен выше:
switch (value) { case Integer i && bar() -> {} case 3 -> {} case Integer i -> {} }
Запретить ставить ветку default
не в конец switch
(или хотя бы выдавать предупреждение):
switch (value) { default -> {} // Должна быть ошибка компиляции case Integer i && i > 0 -> {} }
• Начато голосование по созданию проекта RISC-V Port. Предложение сделать официальный порт OpenJDK под архитектуру RISC-V было озвучено Huawei ещё в декабре 2020 года. Тогда это предложение получило положительную обратную связь, и за это время порт стал достаточно стабилен, чтобы началась работа по его интеграции в главную ветку JDK. Когда проект будет одобрен, планируется выпустить JEP с предложением по интеграции.
• Вышел WildFly 25.
• Вышел Hibernate 5.6.0.
• Вышла Guava 31.0 (и сразу же 31.0.1 из-за проблемы с GWT).
• Вышла Mockito 4.