С какой версией Java (JDK) вы работаете?

Ответ

Основной опыт — с JDK 11 (LTS), как со стабильной и наиболее распространённой версией в enterprise-проектах. Также знаком с JDK 17 (LTS) и новыми возможностями.

Почему JDK 11? Долгосрочная поддержка, зрелость экосистемы и библиотек, требования многих legacy-систем.

Ключевые фичи разных версий:

  • JDK 8: Lambda, Stream API, java.time.
  • JDK 9: Модульная система (JPMS).
  • JDK 10: Локальный вывод типа (var).
  • JDK 11: Новые методы в String, Files, HTTP-клиент (стандартный).
  • JDK 17: Sealed classes, pattern matching для switch (preview).

Пример sealed class из JDK 17:

public sealed class Shape permits Circle, Rectangle {
    // Базовый класс
}

public final class Circle extends Shape {
    private final double radius;
    // ...
}

Для новых проектов рассматриваю JDK 17+ или последний LTS, но выбор зависит от требований проекта и инфраструктуры.

Ответ 18+ 🔞

Да ты послушай, что за цирк с конями творится вокруг этих версий Java! Сидишь такой, вроде всё норм, а потом бац — и тебе уже говорят: «А на какой джаве пишешь?». И тут начинается, блядь, настоящее шоу.

Вот я, например, основную часть своей сознательной жизни провёл в объятиях JDK 11 (LTS). Почему? Да потому что это, сука, как старый проверенный диван — может и не самый красивый, но на нём уже все вмятины под твою жопу, и пиздец как удобно. В enterprise-проектах эта версия — как водка на столе, везде есть. Экосистема вокруг неё обросла, как борода у старперса, библиотеки все под неё заточены, и legacy-системы на неё смотрят с уважением, мол, «наш человек».

Но это не значит, что я в пещере живу! JDK 17 (LTS) тоже в руках покрутил, новые плюшки пощупал. Просто подход у меня такой: сначала надо понять, на каком поле играем, а потом уже мячик пинать.

Короче, чтобы ты не думал, что я совсем отсталый, вот тебе краткий гид по этой ебаной версионной карусели:

  • JDK 8: Это, блядь, классика жанра. Лямбды и Stream API подъехали — все такие: «О, боже, теперь можно писать красиво!». И java.time наконец-то, а то с этими java.util.Date уже мозг вытекал.
  • JDK 9: Тут модули (JPMS) припёрли. Все такие: «О, теперь будет порядок!». А на деле половина просто забила хуй и прописала open module на всё подряд, лишь бы работало. Ёперный театр.
  • JDK 10: var появился. Сначала все охуели: «Вау, тип сам выводится!». Потом начали юзать везде, где только можно и нельзя. Теперь читаешь код — сплошные var, и хуй пойми, что там за объект.
  • JDK 11: Ну, моя рабочая лошадка. Новые методы в String и Files — приятные мелочи. А главное — HTTP-клиент наконец-то в стандартной библиотеке. Не надо больше эти ебаные HttpURLConnection мучать, ура, товарищи!
  • JDK 17: Тут уже серьёзные игрушки. Sealed classes, например. Выглядит это, конечно, красиво, как будто архитектор-перфекционист код писал.

Вот, смотри, как это sealed class выглядит, прям искусство, блядь:

public sealed class Shape permits Circle, Rectangle {
    // Базовый класс
}

public final class Circle extends Shape {
    private final double radius;
    // ...
}

Красота! Чётко видно, кто наследники, и никаких левых уродов в иерархию не пролезет. Удовольствие ебать для педанта.

Так что насчёт выбора? Для новых проектов, конечно, глаза смотрят на JDK 17+ или вообще на последний LTS. Но, чувак, это же не я один решаю! Тут ещё инфраструктура, требования заказчика, которые иногда пишут люди, последний раз видевшие Java в 2012 году. Так что сначала смотрим, что за проект, а потом уже решаем, будем ли мы тут на переднем крае технологий или поплывём на старом, но надёжном танкере.