Универсальные дженерики уже попали в репозиторий Valhalla. И там стоит релиз Java 18! Естественно, preview. Значит по логике мы сможем писать
#Java18 #Java20
List<int> в Java 20. Поскорей бы.#Java18 #Java20
GitHub
universal type variables: initial prototype · openjdk/valhalla@3e896fa
Reviewed-by: mcimadamore
В Java 18 появился коммит, который убирает неявную ссылку из анонимного класса в соответствующий внешний класс, если внутренний класс его не использует. Это то, из-за чего раньше настоятельно рекомендовалось использовать лямбды вместо анонимных классов, потому что в лямбдах как раз эти ненужные ссылки не добавляются и объекты внешних классов очищаются вовремя. Теперь же анонимные классы и лямбды будут вести себя одинаково в этом плане. Правда пишут, что это изменение сломало некие тесты в JCK, но это пообещали исследовать и возможно коммит откатывать не придётся.
#java18
#java18
microJUG
В Java 18 появился коммит, который убирает неявную ссылку из анонимного класса в соответствующий внешний класс, если внутренний класс его не использует. Это то, из-за чего раньше настоятельно рекомендовалось использовать лямбды вместо анонимных классов, потому…
Выбрасывание неявной ссылки на внешний класс уже попало в последнюю сборку JDK 18-ea+26. Откатывать, слава богу, ничего не будут. Я проверил, this$0 действительно исчезает, если анонимный класс не использует ссылку. Но есть один нюанс: если класс является Serializable и нету поля serialVersionUID, то ссылка остаётся :(. Например, в таком анонимном классе this$0 будет всё равно присутствовать:
Так что новая оптимизация вылечит далеко не все случаи. А любителям double brace initialization придётся писать вот так, чтобы избежать ссылки:
new ArrayList<>() {
...
}
Сериализуемых классов в JDK весьма много. Например, практически все коллекции.Так что новая оптимизация вылечит далеко не все случаи. А любителям double brace initialization придётся писать вот так, чтобы избежать ссылки:
var list = new ArrayList<>() {public static final long serialVersionUID = 1L;{
add(1); }};
#java18👍1
Пример сниппета кода в джавадоке на примере документации к java.util.Stream (сверху - до, снизу - как бы это могло выглядеть в Java 18+).
1. Фрагмент кода теперь более заметен благодаря серому фону.
2. Появилась кнопка копирования в буфер обмена.
3. Код нормально выровнен по левому краю (обрезаны отступы).
4. Ссылки на методы кликабельны.
5. К некоторым идентификаторам применены стили (bold, italic, highlighted).
При этом исходный код сниппета является синтаксически валидным Java-кодом и может быть верифицирован внешними инструментами (например, IDE).
#java18
1. Фрагмент кода теперь более заметен благодаря серому фону.
2. Появилась кнопка копирования в буфер обмена.
3. Код нормально выровнен по левому краю (обрезаны отступы).
4. Ссылки на методы кликабельны.
5. К некоторым идентификаторам применены стили (bold, italic, highlighted).
При этом исходный код сниппета является синтаксически валидным Java-кодом и может быть верифицирован внешними инструментами (например, IDE).
#java18
👍16
Метод sun.misc.Unsafe.objectFieldOffset задепрекейтили в Java 18. Пока без forRemoval. Но в будущем станет forRemoval и будет удалён окончательно.
Что это для нас значит? Любителям несанкционировано покопаться во внутренностях JDK станет совсем туго. Придётся выдумывать новые ещё более ужасные хаки. Похоже, Lombok уже не получится запустить без кучи флагов --add-opens.
#java18 #unsafe #lombok
Что это для нас значит? Любителям несанкционировано покопаться во внутренностях JDK станет совсем туго. Придётся выдумывать новые ещё более ужасные хаки. Похоже, Lombok уже не получится запустить без кучи флагов --add-opens.
#java18 #unsafe #lombok
😢3
Результаты опроса и выводы:
• Java 17 вырвалась вперёд и обогнала Java 11🥳 .
• Java 18 и 19 заметно выросли, но процент всё ещё ничтожен (никто не хочет юзать STS-релизы).
• Java 8 постепенно умирает.
• Kotlin показывает стабильный рост. Но мне кажется, что это из-за того что грэдлисты переходят с Groovy на Kotlin DSL. Но могу ошибаться. Напишите в комментах, для чего вы юзаете Kotlin (основной язык / Kotlin DSL / Android).
#java8 #java11 #java17 #java18 #java19 #kotlin
• Java 17 вырвалась вперёд и обогнала Java 11
• Java 18 и 19 заметно выросли, но процент всё ещё ничтожен (никто не хочет юзать STS-релизы).
• Java 8 постепенно умирает.
• Kotlin показывает стабильный рост. Но мне кажется, что это из-за того что грэдлисты переходят с Groovy на Kotlin DSL. Но могу ошибаться. Напишите в комментах, для чего вы юзаете Kotlin (основной язык / Kotlin DSL / Android).
#java8 #java11 #java17 #java18 #java19 #kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉6👍2🤔2