Comments 6
boolean isThereAneedle = stringsList.stream() .anyMatch((@NonNull var s) -> s.equals(“needle”));
Что интересно (частность), даже в Java 17 ещё нельзя поставить var вместо PhoneNumber в выражении с переменной COMPARATOR:
Comparator<PhoneNumber> COMPARATOR = Comparator.comparingInt((PhoneNumber pn) -> pn.areaCode) .thenComparingInt(pn -> pn.prefix);
Map<String, List<MyDtoType>> myMap = new HashMap<String, List<MyDtoType>>();
В java 8 вы скорее напишите Map<String, List<MyDtoType>> myMap = new HashMap<>();
, приведённый в статье способ -- это этоха 1.5/1.6.
Мне нравится потенциальная возможность перехода на 17, но по реальным ощущениям вы нарвётесь на необходимость использования --add-opens
в каком-то количестве, практическую невозможность использования JPMS (например, если где-нибудь в зависимостях закралась guava, которая транзитивно тащит jsr305 с аннотациями в javax.annotation
) и т. п.
Apache Maven 3.6.x, Gradle 6.x, всякие плагины с неистовой любовью к xml типа maven-jaxb2-plugin, некоторые annotation processor'ы, библиотеки сериализации, использующие defineClass и т. п. радостно разваливаются при запуске под 17. Рано или поздно это, конечно, пройдёт, но переход безболезненный только в тривиальных случаях.
В реальности -- надо пробовать и тестировать. В том числе гонять свои приложения под нагрузкой на 17, смотреть как реально поведёт себя ZGC/Shenandoah, если вы до этого жили с CMS. Если у вас используется jni/jna/jnr-ffi, kryo или какой-нибудь offheap, смириться с возможной болью и потихоньку сменить рантайм.
В исходниках версию с 1.8/11 поднять всегда успеете, вслепую прыгать дальше 11, имхо, не стоит. Легче отскочить на 11 при наличии проблем.
Дополню спустя почти полтора года. 17 живёт и здравствует, для части вещей типа netty нужно либо чуток переписывать код, либо добавлять add-opens, но ничего сверхестественного. По большей части всё живёт кроме представителей/поделий enterprise спецолимпиады сильно завязанных на 8.
JPMS у нас так и не взлетел. Тулинг подтягивается, фреймворки -- тоже (spring boot 3.х требует 17, quarkus 3.х -- 11, но рекомендует 17). На zgc/shenondoah пока не перебегали, много где живём на g1.
Странно, что сравниваются только 8 и 17 версии java. Логичнее сравнить 8, 11 и 17, так как 11 тоже LTS и многие из описанных нововведений (относительно 8 версии) там тоже есть.
Есть более актуальное сравнение: Руководство по возможностям языка Java версий 8-19
Возможности Java 17 и рекомендации по миграции