В последней версии Java, среди прочих улучшений, представлен полезный синтаксис для записей.
Мир программирования на Java постоянно развивается, и вам нужно быть в курсе последних событий, чтобы преуспеть в своем ремесле.
Java 21 приносит волну захватывающих улучшений, которые революционизируют ваш подход к параллелизму, операциям сбора данных и работе с записями.
Представляем виртуальные потоки
Масштабирование серверных приложений всегда было сопряжено с трудностями, поскольку потоки часто становились узкими местами. Ограниченное количество потоков в сочетании с частым ожиданием разблокировки событий или блокировок снижает общую производительность.
В прошлом для решения этой проблемы использовались такие конструкции, как CompletableFuture или реактивные фреймворки, что приводило к запутанному коду, который было трудно понять и поддерживать.
К счастью, в Java 19 в качестве функции предварительного просмотра были представлены виртуальные потоки, которые в Java 21 были усовершенствованы и закреплены с помощью JDK Enhancement Proposal 444.
Виртуальные потоки предлагают многообещающую альтернативу, позволяющую более эффективно решать проблемы масштабируемости. Это приводит к повышению производительности и увеличению времени отклика серверных приложений.
Последовательные коллекции более удобны в использовании
Традиционно, использование связанных списков в программировании на Java требует довольно подробного кода. Например, чтобы получить последний элемент, вы должны использовать этот громоздкий подход:
вар последний = list.get (list.size() - 1);
Однако в Java 21 представлена лаконичная и элегантная альтернатива:
вар последний = список.getLast();
Точно так же для доступа к первому элементу LinkedHashSet требуется обходной маршрут:
вар первый = linkedHashSet.iterator().next();
Но с Java 21 эта задача значительно упрощается:
вар первый = linkedHashSet.getFirst();
Вы также можете получить доступ к последнему элементу LinkedHashSet, используя новый получитьПоследнее метод, который позволяет избежать итерации по всему набору.
Эти улучшения в упорядоченных коллекциях не только улучшают читаемость кода, но и упрощают извлечение элементов, делая программирование на Java более эффективным и удобным для разработчиков.
Записывайте шаблоны для удобства
Шаблоны записей, представленные в качестве функции предварительного просмотра в Java 19, предлагают удобный механизм доступа к полям записи в Java без необходимости явного приведения типов или методов доступа.
Они синергируют с Сопоставление с образцом для instanceof и Сопоставление шаблонов для коммутатора, значительно упрощая код и улучшая общую читабельность.
Вот иллюстрация этой концепции с простой записью с именем Позиция:
публичный записывать Позиция(инт Икс, инт у){}
Ранее для выполнения различных действий в зависимости от класса объекта требовалось использование Сопоставление с образцом для instanceof, как показано в следующем фрагменте кода:
публичныйпустотаРаспечатать(Объект о){
если (о случай Позиция р) {
Система.out.printf("o - позиция: %d/%d%n", п.х(), п.у());
} ещеесли (о случай Строка с) {
Система.out.printf(«o — это строка: %s%n», с);
} еще {
Система.out.printf("o это что-то другое: %s%n", о);
}
}
С Запись паттернов, теперь вы можете напрямую сопоставить шаблон записи, например Позиция (целое x, целое y) вместо того, чтобы использовать Позиция р шаблон. Это позволяет вам получить доступ к переменным Икс и у непосредственно в коде, что устраняет необходимость п.х() и п.у():
публичныйпустотаРаспечатать(Объект о){
если (о случайПозиция(инт Икс, инт у)) {
Система.out.printf("o - позиция: %d/%d%n", х, у);
} ещеесли (о случай Строка с) {
Система.out.printf(«o — это строка: %s%n», с);
} еще {
Система.out.printf("o это что-то другое: %s%n", о);
}
}
Кроме того, вы можете использовать Запись паттернов в сочетании с Сопоставление шаблонов для коммутатора, чтобы еще больше упростить код:
публичныйпустотаРаспечатать(Объект о){
выключатель (о) {
случайПозиция(инт Икс, инт у) -> Систем.выход.printf("o - позиция: %d/%d%n", х, у);
случай Строка s -> System.out.printf(«o — это строка: %s%n», с);
по умолчанию -> System.out.printf("o это что-то другое: %s%n", о);
}
}
Шаблоны вложенных записей позволяют сопоставлять записи, чьи поля сами являются записями. Например, рассмотрим запись с именем Путь который включает в себя от и к позиция:
публичный записывать Путь(Позиция от, Позиция до){}
Используя образцы пластинок, печатая Путь объект становится более кратким:
публичныйпустотаРаспечатать(Объект о){
выключатель (о) {
случайПуть(Позиция от, Позиция до) -> Систем.выход.printf("o - это путь: %d/%d -> %d/%d%n", из.х(), от.у(), к.Икс(), к.у());
// другие случаи
}
}
С помощью Запись паттернов, обработка записей с полями разных типов становится более наглядной и читаемой. Предположим, вы изменили записи, Позиция2D и Позиция3D, где Позицияэто интерфейс Java которые оба реализуют:
публичный запечатанный интерфейсПозицияразрешаетПозиция2D, Позиция3D{}
публичный записывать Позиция2D(инт Икс, инт у) реализует Позиция {}
публичный записывать Позиция3D(инт Икс, инт у, инт г) реализует Позиция {}
публичный Путь записи < P расширяет позицию > (P from, P to) {}
Чтобы различать поведение печати для 2D- и 3D-контуров, вы можете использовать шаблоны записи:
публичныйпустотаРаспечатать(Объект о){
выключатель (о) {
случайПуть(Position2D от, Position2D до) -> Систем.выход.printf(«o — двумерный путь: %d/%d -> %d/%d%n», из.х(), от.у(), к.Икс(), к.у());
случайПуть(Position3D от, Position3D до) -> Систем.выход.printf(«o — это трехмерный путь: %d/%d/%d -> %d/%d/%d%n», из.х(), от.у(), от.г(), к.Икс(), к.у(), к.г());
// другие случаи
}
}
Шаблоны записей значительно уменьшают количество детализации и улучшают читаемость кода при работе с записями, содержащими поля разных типов.
Откройте новые возможности с Java 21
В Java 21 представлено множество мощных функций, расширяющих возможности языка программирования Java. Воспользовавшись этими улучшениями, вы сможете оптимизировать процессы разработки и открыть новые возможности для своих приложений.
Постоянное обновление новейших языковых функций и платформ Java позволяет поддерживать эффективный и удобный в сопровождении код, гарантируя, что вы будете в авангарде программирования на Java.