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

Ответ

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-использованию.

Ответ 18+ 🔞

Ну и понеслась, блядь, эта ваша Java, как бешеная мартышлюшка с гранатой! Сидишь ты такой, только освоил восьмёрку, а они уже семнадцатую впаривают. Давайте разберём, что там за пиздопроебибна случилась за эти годы, а то голова кругом.

Java 15 (не-LTS, то есть — временщик, одноразовый):

  • Sealed Classes (Preview): Наконец-то, блядь, додумались! Теперь можно указать, какие конкретно ублюдки имеют право наследовать от твоего класса. Не то чтобы любой левый пидарас с улицы мог прийти и сказать «я твой сын». Прямо в коде пишешь разрешения, как в спецпропуск.

    public sealed class Shape permits Circle, Square, Rectangle { }

    Видишь? Shape говорит: «В мою наследственную лигу входят только Circle, Square и Rectangle. Остальные — на хуй».

  • Text Blocks (Final): О, ебать мои старые костыли, вот это действительно полезная штука! Раньше чтобы SQL-запрос в коде написать, приходилось его склеивать из кусков с плюсами и переносами n, получалась такая каша, что волнение ебать. А теперь? Красота!

    String query = """
                   SELECT id, name
                   FROM users
                   WHERE active = true
                   """;

    Три кавычки, и внутри как в блокноте пишешь. Удобно, блядь, как тёплый тапок.

Java 17 (LTS — вот это серьёзно, на этом можно сидеть годами):

  • Sealed Classes (Final): Всё, из Preview-режима вывели, теперь это полноценная, стабильная, не глючная фича. Можно в продакшене использовать без оглядки.

  • Pattern Matching for switch (Preview): Это, сука, просто песня! Раньше switch был тупой как пробка, только с примитивами да enum'ами работал. А теперь? Теперь ему можно скормить любой объект, и он его разберёт на запчасти прямо в кейсах!

    String formatted = switch(obj) {
        case Integer i -> String.format("int %d", i);
        case String s -> String.format("String %s", s);
        case null, default -> "Unknown";
    };

    Смотри: взял obj, если это Integer — сразу в переменную i распаковал и используй. Красота, в рот меня чих-пых! Пока ещё Preview, но уже охуенно.

  • Records (Final): Вот это, блядь, главный хит сезона! Раньше чтобы создать класс, который просто хранит данные (типа Point с x и y), нужно было писать тонну boilerplate-кода: поля, конструктор, геттеры, equals, hashCode, toString... Удивление пиздец, сколько писанины! А теперь?

    record Point(int x, int y) { }
    Point p = new Point(5, 10);
    System.out.println(p.x()); // Геттер генерируется автоматически, да!

    Одна строчка, блядь! И всё нужное уже там есть. Гениально и просто. В семнадцатой уже финальная, стабильная версия.

  • Удаление устаревшего: Выкинули на мороз, наконец-то, этих двух дедов — Applet API и Security Manager. Все ими уже лет двадцать не пользовались, а они тут место занимали. Правильно, блядь, пора на свалку истории.

  • Контекстно-зависимые классы-идентификаторы (Preview): Ну это такая хитрая жопа, позволяет объявлять локальные классы и интерфейсы прямо где угодно, не только на уровне класса. Пока preview, посмотрим, приживётся ли.

А теперь главное, почему вся эта хуйня важна: Java 17 — это, сука, тот самый мощный LTS-релиз, где собрали и довели до ума все preview-плюшки последних лет. Records, Text Blocks, Sealed Classes — теперь это всё стабильно, как швейцарские часы. Если начинать новый серьёзный проект — стартуй с семнадцатой, не ошибёшься. Всё остальное — просто промежуточные станции на пути к этому оазису.