Всем привет! ? ? ?? Мы — Java-разработчики Тинькофф: Андрей, Арсений, Константин и Константин. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и делимся этим со всем сообществом.

В этом месяце в меню обновления: Intellij Idea с модным терминалом и AI-подсказками, миграции на новые версии Spring Boot за пару кликов в новой версии Java on VS Code, не забыли обновить и Micronaut, GraalVm, PMD и JMC. На горячее JEPы: Exception handling in switch, Derived Record Creation, Stream Gatherers, Vector API, String Templates. Не забыли и про бесплатный сыр — доступ к Spring Academy Pro. 

Утоляем голод по новым знаниям интересными статьями и видео, для любителей экзотики — новые инструменты сборки, если не пробовали bld. А на десерт стоит присмотреться презентациям с прошедшего Jpoint 2024. 

Главные новости

Spring предлагает бесплатный доступ к контенту Spring Academy Pro. С 5 апреля 2024 года платная подписка для профессионального контента Spring Academy больше не требуется, а новый контент продолжит появляться.

MICRONAUT FRAMEWORK 4.4.0 RELEASED! Фонд Micronaut выпустил версию 4.4.0 фреймворка Micronaut. В ней есть улучшения в Micronaut Core, новый модуль, Micronaut OpenSearch, интеграция с OpenSearch, обновление зависимостей до Kotlin 1.9.23 и обновления многих модулей Micronaut. 

GraalVM for JDK 22 Community 22.0.1. Релиз GraalVM для JDK 22 Community 22.0.1 от Oracle Labs содержит исправления на основе критического обновления от Oracle за апрель 2024 года. Среди них: исправление NullPointerException в протоколе отладки Java Debug Wire Protocol при запросе отладчиком таблицы локальных переменных и устранение блокировки, вызванной методом tearDownIsolateOnShutdown(), определенным в классе IsolateAwareTruffleCompiler. 

What's New in JMC 9? — Sip of Java. Нравится копаться в недрах работы JVM-приложений? Нам тоже, особенно когда есть удобные для этого инструменты. А если приложение на JDK 17 +, то делать это можно с помощью JMC 9! В статье рассказывается, что нового в 9-й версии. Из самого важного — конечно, черная тема ?

Вышла Intellij IDEA 2024.1. Посмотрим на ключевые фичи:

  • Full line code completion — одно из самых важных нововведений. Теперь IDE может подсказать целую строку кода без использования AI-ассистента в клауде. Вся работа проходит локально. Доступно только для Ultimate-версии.

  • Поддержка фич Java 22. Безымянные шаблоны и переменные, упрощенное объявление main-метода, выражения перед вызовом super(...) — все это теперь поддерживается IDE. А еще второе ревью String Template-ов — возможно, когда-нибудь нам пригодится ?

  • Бета нового терминала. Теперь у терминала в IDE много крутых возможностей: подсказки при вводе команд, удобная навигация и доступ к истории команд, а еще разделение команд на блоки. Выглядит просто шикарно!

  • Закрепленные строки в редакторе. Одна из тех фич, о которых думаешь: «Как я мог раньше без нее жить?» Теперь в верхней части редактора будут закреплены ключевые структурные элементы. Например, начало классов и методов или родительские теги в xml.

Полный список нововведений, как всегда, можно посмотреть на странице What’s New.

Вышел PMD 7 — статический анализатор кода для Java, а теперь еще и для Kotlin. В новой версии:

  • обновили лого;

  • обновили CLI;

  • полная поддержка Antlr;

  • обновили PMD Designer;

  • поддержка новых версий Java 21 и 22;

  • поддержка новых языков — Kotlin и Swift;

  • поддержка CPD теперь есть для Apace VTL, Coco, Julia, TypeScript.

A preview of Jakarta Data 1.0 — рассказ в двух частях о Jakarta Data первой версии, которая будет интегрирована в спецификацию JEE11. Сама Jakarta Data — стандартизированный декларативный способ взаимодействовать с данными, подобный Spring Data, но имеет ряд преимуществ. Например: типобезопасность на этапе компиляции, генерация кода вместо рефлексии, стандартизация.

Первая часть рассказа — введение и знакомство с основными аннотациями и автогенерируемыми запросами, а еще с написанием собственных запросов через аннотацию @Query.
Вторая часть рассказывает про изменения в статической метамодели по сравнению с Jakarta Persistence, о реализации сортировок и пагинации при помощи Jakarta Data.

Вышла альфа мажорной версии Hibernate 7.0.0.Alpha1. Jakarta Persistence 3.2, минимальная версия Java теперь 17, миграция с Hibernate Commons Annotations на Hibernate Models и гайд по миграции.

Java on Visual Studio Code Update — March 2024. Мартовское обновление Java-плагина для VS Code принесло много приятного:
— смена уровня логирования на лету, даже если ваше Spring-приложение уже запущено;
— просмотр тестового покрытия прямо в редакторе;
— и, конечно, киллер-фича этого обновления — утилита для перехода на новые версии Spring Boot, мигрировать теперь можно будет в пару кликов не выходя из редактора.

Update on String Templates (JEP 459). String Templates, находящиеся в Java 22 в статусе second preview, отправляются на редизайн и не будут доступны в JDK23, даже с флагом –enable-preview.

JEP draft: Exception handling in switch. Драфт JEP, посвященный обработке исключений в switch. Основная мотивация — сделать менее громоздкой конструкцию switch, обернутую в try-catch. Предлагается синтаксис:

switch(some()) {
  …
  case throws Exception e -> doSomthing(e);
  …
}

JEP 468: Derived Record Creation официально уехал в превью фичи Java 2023. К этому JEP испытываю некоторые внутренние противоречия, новый синтаксис с with для меня выглядит инородно и громоздко в Java. Рассмотрим немного примеров, для начала — как сейчас:

Point one = new Point(0, 0);
Point two = new Point(one.x() + 2, one.y() * 10);

как будет:

Point one = new Point(0, 0);
Point two = one with { x += 2; y *= 10;};

можно слегка отрефакторить, но код вырастет вниз:

  Point one = new Point(0, 0);
  Point two = one with { 
      x += 2; 
      y *= 10;
  };

Один из плюсов нового синтаксиса — возможность использовать часть полей:

 Point one = new Point(0, 0);
 Point two = one with { x += 2; };

 Эквивалент:

Point one = new Point(0, 0);
Point two = new Point(one.x() + 2, one.y());
Костя Польщиков

Когда нужно поменять пару полей в большой модельке, новый синтаксис более выигрышный. Но когда полей становится много или все, то он достаточно громоздкий, имхо. Что вы думаете по поводу этого JEPа?

JEP 473: Stream Gatherers (Second Preview). JEP уже встречал нас в превью 22 Java, в Java 23 он уехал без изменений, чтобы собрать дополнительную обратную связь и улучшить опыт использования. JEP нужен для поддержки пользовательских промежуточных операций в Stream API: это позволит потоковым конвейерам преобразовывать данные способами, которые нелегко реализовать с помощью существующих встроенных промежуточных операций. Звучит приятно, особенно в обработке потоков данных, поэтому ждем всей редакцией :)

JEP 469: Vector API (Eighth Incubator). Можно было бы лишний раз не говорить об этом, но Vector API продолжает бить рекорды и уходит в восьмой раз в инкубатор в Java 23. Все еще ждем Project Valhalla.

Интересные видео

Java 23: Restoring the Balance with Primitive Patterns - Inside Java Newscast #66 Не хватало паттернов в Java? Вот еще один — Primitive Patterns, фича появится в статусе preview в Java 23. Можно будет использовать паттерн-матчинг для примитивных типов в instanceof и switch. Подробнее о том, как это работает и почему очень упростит приведение примитивных типов, — в видео. Бонусом идет обзор нескольких вариантов паттерн-матчинга, которые потенциально могут появляться в Java. 

Java Withers - Inside Java Newscast #67 «Неизменяемость — это здорово, пока тебе не потребуется что-то изменить» ? Уверены, многие сталкивались с бойлерплейтом при работе с неизменяемыми объектами. Связан он, конечно, с тем, что по ходу выполнения кода нам таки требуется что-то в них поменять. JEP 468 предлагает элегантное решение этой проблемы. Новое ключевое слово with позволит лаконично выразить в коде инструкцию о создании копии record-а, в котором нужно поменять значения определенных полей. Но, помимо устранения бойлерплейта, эта фича также открывает еще несколько интересных возможностей. Подробнее — в видео.  

Programmer's Guide to JDK Flight Recorder Подробный туториал, посвященный JFR. Из него вы узнаете, что это за инструмент и зачем он нужен, как анализировать записи, как определять свои кастомные события и даже как их использовать в юнит-тестах.

Полезные статьи

Java Frameworks You Must Know in 2024  В посте обзор инструментов (да, там не только фреймворки), которые стоит освоить современному Java-разработчику. Для каждого инструмента дается краткая справка, раскрывающая область применения и основные фичи. Кроме того, есть ссылки на материалы, которые помогут быстро освоить соответствующий инструмент, что очень полезно.

Ensuring the right usage of Java 21 new features Несколько полезных советов по использованию фич, представленных в Java 21. Советы в основном посвящены новым API, виртуальным потокам и switch-ам. Читается легко и быстро, а наглядные примеры кода отлично способствуют пониманию.

Spring Framework 6.2.0-M1: all the little things Небольшая заметка, где описываются фичи Spring 6.2.0, которые тянут на отдельный материал, но не становятся от этого менее важными. Среди них: фоновая инициализация бинов, fallback-бины, интеграция MockMvc с AssertJ.

Getting started with bld. Статья про введение в bld — новый инструмент сборки проекта, который фокусируется на простоте и предоставляет конфигурацию на чистой Java. 

Interesting Facts About Java Streams and Collections Небольшая статья с кучей примеров и интересными фактами о стримах и коллекциях, превью фичи java 22, специальные коллекции для Enum и не только.

How to work with Apache Kafka in Spring Boot? Обзорная статья про Kafka. Верхнеуровнево рассмотрена архитектура, основные компоненты системы и API. Есть пример использования из SpringBoot-приложения. Если еще не знакомы с технологией или хотите освежить в памяти знания — смело читайте статью.

Джавовые события

JPoint 2024 17 апреля прошла онлайн-часть JPoint 2024, а 24 и 25 — офлайн. Презентации всех докладов уже доступны для свободного просмотра. 

Спасибо, что прочитали! Ждем обратную связь в комментариях. Увидимся через месяц ?

Присылайте материалы, если встретили что-то интересное, — опубликуем в следующем выпуске! А в этом месяце шлем лучи благодарности @IvanVakhrushev

Комментарии (5)


  1. Homyakin
    07.05.2024 06:14

    Когда нужно поменять пару полей в большой модельке, новый синтаксис
    более выигрышный. Но когда полей становится много или все, то он
    достаточно громоздкий, имхо.

    Для меня with'еры для record'ов очень желательная фича. Пишу и на котлине и на джаве, в 90% случаев нужно как раз поменять одно-два поля. В котлине решается через copy, а в джаве сейчас приходится городить свои костыли вида copyWithField. Синтаксис возможно спорный, но фича точно нужна.


  1. DenSigma
    07.05.2024 06:14
    +1

    with действительно странно.

    Лучше уж

    Point one = new Point(0, 0);
    Point two = new Point(one) { x += 2; };


  1. DenSigma
    07.05.2024 06:14

    Где можно взять bld в виде jar?