Как в Java чище проверять тип через pattern matching?
Раньше при проверке типа часто писали так:
if (value instanceof String) {
String text = (String) value;
System.out.println(text.length());
}
Код рабочий, но в нём есть лишнее приведение типа. Сначала Java уже проверила, что value это String, а потом мы всё равно руками делаем cast.
В современном Java можно записать короче:
if (value instanceof String text) {
System.out.println(text.length());
}
Переменная text доступна только там, где проверка точно прошла.
Это удобно для валидации:
if (input instanceof String text && !text.isBlank()) {
return text.trim();
}
И для обработки разных входных объектов:
if (event instanceof LoginEvent login) {
audit(login.userId());
}
При этом Java не даст использовать переменную вне безопасной области:
if (!(value instanceof String text)) {
return;
}
System.out.println(text.length());
Здесь text уже доступен после return, потому что дальше код дойдёт только если value действительно String.
Такой синтаксис особенно приятен в коде с Object, событиями, DTO, sealed-иерархиями и обработкой внешних данных.
👉 Java Ready | #совет
Раньше при проверке типа часто писали так:
if (value instanceof String) {
String text = (String) value;
System.out.println(text.length());
}
Код рабочий, но в нём есть лишнее приведение типа. Сначала Java уже проверила, что value это String, а потом мы всё равно руками делаем cast.
В современном Java можно записать короче:
if (value instanceof String text) {
System.out.println(text.length());
}
Переменная text доступна только там, где проверка точно прошла.
Это удобно для валидации:
if (input instanceof String text && !text.isBlank()) {
return text.trim();
}
И для обработки разных входных объектов:
if (event instanceof LoginEvent login) {
audit(login.userId());
}
При этом Java не даст использовать переменную вне безопасной области:
if (!(value instanceof String text)) {
return;
}
System.out.println(text.length());
Здесь text уже доступен после return, потому что дальше код дойдёт только если value действительно String.
Такой синтаксис особенно приятен в коде с Object, событиями, DTO, sealed-иерархиями и обработкой внешних данных.
👉 Java Ready | #совет