Какие ключевые функции появились в Java 15 и Java 17?

«Какие ключевые функции появились в Java 15 и Java 17?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Java 15 (не-LTS):

  • Sealed Classes (Preview): Ограничивают, какие классы могут наследовать или реализовывать класс/интерфейс.
    public sealed class Shape permits Circle, Square, Rectangle { }
  • Text Blocks (Final): Многострочные строковые литералы, упрощающие работу с JSON, HTML, SQL.
    String query = """
                   SELECT id, name
                   FROM users
                   WHERE active = true
                   """;

Java 17 (LTS - долгосрочная поддержка):

  • Sealed Classes (Final): Стабильная версия фичи.
  • Pattern Matching for switch (Preview): Позволяет использовать паттерны и деструктуризацию в операторе switch.
    String formatted = switch(obj) {
        case Integer i -> String.format("int %d", i);
        case String s -> String.format("String %s", s);
        case null, default -> "Unknown";
    };
  • Records (Final): Краткий синтаксис для создания неизменяемых классов-контейнеров данных.
    record Point(int x, int y) { }
    Point p = new Point(5, 10);
    System.out.println(p.x()); // Геттер генерируется автоматически
  • Удаление устаревшего: Окончательно удалены Applet API и Security Manager (помечены на удаление).
  • Контекстно-зависимые классы-идентификаторы (Preview): Позволяют определять локальные классы, интерфейсы и перечисления в любом месте.

Почему это важно: Java 17 — ключевой LTS-релиз, консолидирующий множество preview-фич (Records, Text Blocks, Sealed Classes) в стабильные, готовые к production-использованию.