middle
Primitive Types in Patterns и instanceof
Primitive Types in Patterns (финализировано в Java 25) расширяют pattern matching на примитивные типы, проверяя безопасность преобразования (narrowing) без потери данных.
Пример
// Примитивы в instanceof
Object obj = 42;
if (obj instanceof int i) {
System.out.println("int value: " + i);
}
// Примитивы в switch
static String classify(Object obj) {
return switch (obj) {
case int i when i > 0 -> "positive int: " + i;
case int i -> "non-positive int: " + i;
case long l -> "long: " + l;
case double d -> "double: " + d;
case String s -> "string: " + s;
default -> "other";
};
}
// Безопасные преобразования (narrowing) без потери данных
long value = 42L;
if (value instanceof int i) { // true — 42 помещается в int
System.out.println("fits in int: " + i);
}
long big = Long.MAX_VALUE;
if (big instanceof int i) { // false — не помещается
// не выполнится
}
Частые ошибки
- Ожидать автоматический narrowing cast —
long instanceof intпроверяет допустимость, а не выполняет приведение; значение должно быть в диапазоне int
Как используется в 2026
- Упрощает обработку числовых типов в generic-коде
- Дополняет картину полного pattern matching для всех типов Java
На собеседовании: ключевой момент —
instanceofдля примитивов проверяет, помещается ли значение без потери данных, а не просто приводит тип. Покажите пример сlong instanceof intдля 42L (true) и Long.MAX_VALUE (false).