Ответ
Основной опыт — с 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 году. Так что сначала смотрим, что за проект, а потом уже решаем, будем ли мы тут на переднем крае технологий или поплывём на старом, но надёжном танкере.