До Java 21 блок
switch работал только с int, enum, String и еще несколькими примитивами. С JEP 441 теперь можно:- использовать
switch с любыми объектами- проверять типы прямо в case
- деструктуризировать
record-объектыДо этой фичи, проверить тип
Object можно было с помощью instanceof и код был набором if-ов с приведением типа Object к нужному: if (obj instanceof String) {
String s = (String) obj;
System.out.println("String length: " + s.length());
} else if (obj instanceof Integer) {
Integer i = (Integer) obj;
System.out.println("Square: " + (i * i));
}
С новой фичей проверку на тип и работа с объектом конкретного типа можно через switch:
Object obj = "abc";
switch (obj) {
case String s -> System.out.println("String length: " + s.length());
case Integer i -> System.out.println("Square: " + (i * i));
default -> System.out.println("Unknown type");
}
Чище, безопаснее и не нужно вручную кастовать типы.
👉 Java Portal