Pull to refresh

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 версии) там тоже есть.

Sign up to leave a comment.

Articles