Современные конструкции Java
Современные конструкции Java
Язык после Java 8 получил конструкции, которые сокращают шаблонный код и делают модели данных и иерархии типов явными. Ниже — обзор с Java 14 по 21, без привязки к конкретному LTS: проверяйте версию JDK в структуре проектов.
Связанные темы: ООП, ключевые слова, Stream API.
Локальный вывод типа var (Java 10+)
var list = new ArrayList<String>(); // ArrayList<String>
var path = Path.of("config.yml"); // Path
var — только для локальных переменных с инициализатором. Тип выводится компилятором, в байт-коде — обыный явный тип.
Не используйте var, если тип неочевиден из правой части (var x = service.find() — плохо).
record (Java 16+)
Неизменяемый носитель данных с автоматическими equals, hashCode, toString, геттерами:
public record Point(int x, int y) {
public Point {
if (x < 0 || y < 0) throw new IllegalArgumentException();
}
}
| record | Класс с полями |
|---|---|
| Мало кода, семантика «значение» | Гибкость, изменяемость, наследование |
| Нельзя наследовать классы | Обычная иерархия |
| Подходит для DTO, команд, событий | Сущности с поведением |
Record может реализовывать интерфейсы и содержать статические члены; компактный конструктор валидирует поля.
В Spring / JPA records часто используют как DTO; сущности БД по-прежнему часто — классы с прокси Hibernate.
sealed-классы и интерфейсы (Java 17+)
Ограничивают, кто может наследовать или реализовать тип:
public sealed interface Shape permits Circle, Rectangle { }
public record Circle(double radius) implements Shape { }
public record Rectangle(double width, double height) implements Shape { }
| Модификатор подтипа | Смысл |
|---|---|
final | Дальнейшее наследование запрещено |
sealed | Снова ограниченный список permits |
non-sealed | Открыть ветку иерархии |
Польза: исчерпываемые варианты (результат операции, тип сообщения), безопасный switch по типам.
Pattern matching
instanceof (Java 16+):
if (obj instanceof String s && !s.isBlank()) {
System.out.println(s.toUpperCase());
}
switch по типу (Java 17+, расширяется в 21+):
static double area(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Rectangle r -> r.width() * r.height();
};
}
Компилятор проверяет полноту для sealed-иерархий: если все подтипы известны, default не обязателен.
switch-выражение (Java 14+) возвращает значение:
String level = switch (code) {
case 1, 2 -> "low";
case 3 -> "medium";
default -> "high";
};
Стрелки -> без fall-through; классический case X: с break по-прежнему доступен.
Текстовые блоки и formatted
См. строки: """ ... """ и "{}".formatted(args).
Вспомогательные API
Optional— см. Stream API.List.of,Map.of,Set.of— неизменяемые коллекции фиксированного размера.Objects.requireNonNullElse— null-safe значения по умолчанию.
Что выбрать в новом коде
| Задача | Рекомендация |
|---|---|
| DTO ответа API | record |
| Закрытый набор вариантов | sealed + switch |
| Богатая доменная сущность | обычный класс, инкапсуляция |
| Анонимный коллбэк | лямбда вместо анонимного класса (особенности) |
| Много полей с наследованием | класс, не record |
Версии и совместимость
- Укажите
release/source/targetв Maven/Gradle под LTS вашей команды. - Multi-release JAR — если нужны разные реализации под разные JDK (конфигурации).
- Не используйте preview-фичи в production без
--enable-previewи плана миграции.
Связанные материалы
- Объектно-ориентированное программирование
- Ключевые слова в Java
- Аннотации и рефлексия
- История языка Java
- Чек-лист самопроверки
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Основы Java - устройство JDK/JVM, модель компиляции и базовые принципы платформонезависимого выполнения. Java — это объектно-ориентированный язык программирования общего назначения, который работает на принципах «напиши один раз, запускай в любом месте». Набор советов, правил, принципов и обычаев в разработке на этом языке. История Java — от проекта Green и Oak до OpenJDK, LTS-релизов и современной платформы (модули, records, виртуальные потоки). Библиотеки, фреймворки, инструменты сборки, тестирования, развёртывания и мониторинга. Что такое пакет и пакетная структура, как собираются проекты на Java. Справочник-шпаргалка по конфигурациям в Java — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Гайд по установке и настройке с написанием первой программы и её запуском. Практические примеры — консольные утилиты, композиция классов в мини-игре и первое Swing-приложение. Точки останова, пошаговое выполнение, панели Variables и Call Stack — практика отладки в IntelliJ IDEA. Кавычки, точки, запятые, скобки и прочие знаки препинания. Это полный справочник всех ключевых слов языка Java, включая основные, контекстные и зарезервированные слова.Основы языка Java
Что требуется знать перед началом изучения языка программирования Java
Рекомендации по разработке на Java
История языка Java
Экосистема Java-приложений
Структура и сборки Java-проектов
Справочник по конфигурациям в Java
Первая программа на Java
Простые приложения на Java
Отладка Java-кода в IDE
Синтаксис и пунктуация в Java
Ключевые слова в Java