Новости Java #29

• Очередной 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.

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

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