Gymterview
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).