• Вышел новый черновик JEP: Implicit Classes and Enhanced Main Methods (Preview). В нём предлагается сделать протокол запуска программ на Java более гибким, дав возможность программисту (в особенности новичку) опускать ненужные конструкции при написании простых программ, что поможет упростить вхождение в язык.
Во-первых, модификатор public
и параметр String[] args
для метода main()
будут опциональными:
class HelloWorld { static void main() { System.out.println("Hello World"); } }
Во-вторых, метод main()
не будет обязан быть статическим. Тогда JVM сама инстанцирует класс (для этого у него должен иметься не-private конструктор без аргументов) и вызовет метод main()
:
class HelloWorld { void main() { System.out.println("Hello World"); } }
В-третьих, само объявление класса будет опциональным. В таком случае JVM сама создаст экземпляр безымянного неявного класса и вызовет main()
на нём:
void main() { System.out.println("Hello World"); }
Эти три упрощения помогут новичкам сфокусировать своё изучение языка на простых концепциях вроде объявлений переменных и циклов, а затем постепенно переходить к более сложным (классам, модификаторам доступа и статическим методам).
• Вышел ещё один черновик JEP: Support Markdown in Documentation Comments. В этом JEP'е предлагается добавить возможность писать JavaDoc на языке Markdown вместо HTML. Markdown на сегодняшний день является очень популярным форматом написания документации, отличительной особенностью которого является простота синтаксиса и лёгкость чтения. Markdown трансформируется в HTML, но достаточно легко читаем и в сыром виде.
Пример возможной документации на Markdown для Object.hashCode()
с использованием Markdown:
/**md * Returns a hash code value for the object. This method is * supported for the benefit of hash tables such as those provided by * {@link java.util.HashMap}. * * The general contract of `hashCode` is: * * - Whenever it is invoked on the same object more than once during * an execution of a Java application, the `hashCode` method * must consistently return the same integer, provided no information * used in `equals` comparisons on the object is modified. * This integer need not remain consistent from one execution of an * application to another execution of the same application. * - If two objects are equal according to the {@link * #equals(Object) equals} method, then calling the * `hashCode` method on each of the two objects must produce the * same integer result. * - It is _not_ required that if two objects are unequal * according to the {@link #equals(Object) equals} method, then * calling the `hashCode` method on each of the two objects * must produce distinct integer results. However, the programmer * should be aware that producing distinct integer results for * unequal objects may improve the performance of hash tables. * * @implSpec * As far as is reasonably practical, the `hashCode` method defined * by class `Object` returns distinct integers for distinct objects. * * @return a hash code value for this object. * @see java.lang.Object#equals(java.lang.Object) * @see java.lang.System#identityHashCode */
• Вышел Apache Maven 3.9.0. Самые заметные изменения:
- Минимальная версия Java теперь 8. Это первое увеличение минимальной версии Java спустя 8 лет. В прошлый раз это был Maven 3.3.1, где минимальной версией стала Java 7.
- Обратная совместимость с Maven 2.x окончательно убрана.
- Теперь выдаются предупреждения об использовании deprecated плагинов, целей, параметров и т.д.
- В консоли теперь пишутся префиксы плагинов вместо их
artifactId
(например,compiler:3.10.1:compile
вместоmaven-compiler-plugin:3.10.1:compile
). - Теперь можно вызывать цели через
mvn pluginPrefix:version:goal
. Раньше это можно было делать либо черезmvn:pluginPrefix:goal
, либо черезgroupId:artifactId[:version]:goal
. - Стала возможной активация профиля по типу
packaging
.
Полный список изменений и нововведений тут.
• Вышел Gradle 8.0.
• Вышел JetBrains Java Annotated Monthly за февраль.