Новости Java #54

• Вышел новый черновик 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 за февраль.

Подписывайтесь на канал в Telegram, чтобы не пропускать новости.

Все материалы на этом сайте выложены под лицензией CC BY-SA 4.0
© Евгений Козлов, 2017-2024
Feed
Table of JEPs