• По просьбам читателей на сайт minijug.ru был добавлен feed в формате Atom. Это сделано для тех, кто предпочитает узнавать о новых публикациях через агрегатор новостных лент, а не через Telegram-канал. Адрес feed здесь.
• Java 16 теперь во второй фазе Rampdown, а значит на одну ступень ближе к релизу, который по плану должен произойти 16 марта.
• В компилятор Java было внесено несколько изменений в отношении preview API. Preview API – это один из трёх типов preview feature в Java, наряду с preview language feature и preview VM feature. Preview API разделены на две большие группы: нормальные (normal) и рефлективные (reflective). Нормальные также подразделяются на неотъемлемые (essential), удобные (convenient) и автономные (standalone). Однако для javac
важно только разделение на нормальные и рефлективные. Главные изменения javac
следующие:
1. Аннотация @PreviewFeature
перенесена из пакета jdk.internal
в пакет jdk.internal.javac
, и в неё добавлен флаг reflective
, который заменил старый флаг essentialAPI
. Этот новый флаг как раз и поможет компилятору отличать рефлективные preview API от нормальных.
2. Рефлективные preview API можно использовать без флага компилятора --enable-preview
, а нормальные – только с флагом.
3. При использовании класса, который использует preview feature, теперь выдаётся предупреждение (например, если использован sealed
-класс из какой-нибудь библиотеки). Но это предупреждение можно подавить через @SuppressWarnings("preview")
.
4. Классы помечаются как зависящие от preview feature, только если это действительно необходимо (такие class-файлы имеют специальную минорную версию 65535, например 61.65535 для Java 17). Если класс не использует ни одной preview language feature (ни прямо, ни косвенно), ни одной preview VM feature и ни одного нормального preview API, то он компилируется в обычный (не-preview) class-файл. Другими словами, если из preview features использовать только рефлективные preview API, то такие программы можно будет запускать без флага --enable-preview
, даже если они скомпилированы с флагом --enable-preview
.
Эти изменения в javac
будут работать только начиная с Java 17.
• Опубликован новый черновик JEP: Primitive Objects (Preview), в котором описывается, как в Java планируется внедрить примитивные объекты. Примитивные объекты – это объекты, которые не имеют идентичности, то есть при их копировании получается объект, неотличимый от оригинального. Такие объекты могут передаваться напрямую и легко встраиваться (в другие объекты/массивы/стек), что снижает накладные расходы на их использование и делает их более эффективными, чем объекты с идентичностью.
Новый черновик JEP – это возможно первая детальная публичная спецификация, которая стала результатом многолетних исследований, множества встреч экспертов и обсуждений, проведённых по value-типам в рамках проекта Valhalla. В ходе проекта было сделано несколько прототипов, несколько раз значительно менялась концепция, а сами value-типы дважды переименовывались: сначала в inline-классы, а потом в примитивные классы.
• В блоге JetBrains вышел новый выпуск «Java Annotated Monthly», где собрано огромное количество ссылок на новости, статьи, тьюториалы и прочие материалы о Java и связанных темах.
• Вышла новая сборка Loom, основанная на JDK 17+5.
• Вышла Scala 2.12.13.