en
Feedback
Java Portal | Программирование

Java Portal | Программирование

Open in Telegram

Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Show more

📈 Analytical overview of Telegram channel Java Portal | Программирование

Channel Java Portal | Программирование (@java_iibrary) in the Russian language segment is an active participant. Currently, the community unites 12 115 subscribers, ranking 10 397 in the Technologies & Applications category and 54 492 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 12 115 subscribers.

According to the latest data from 08 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -138 over the last 30 days and by -5 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 11.21%. Within the first 24 hours after publication, content typically collects 6.34% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 1 360 views. Within the first day, a publication typically gains 769 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 4.
  • Thematic interests: Content is focused on key topics such as boot, string, void, архитектура, resttemplate.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика Связь: @devmangx РКН: https://clck.ru/3H4WUg

Thanks to the high frequency of updates (latest data received on 09 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

12 115
Subscribers
-524 hours
-307 days
-13830 days
Posts Archive
Плохие практики в коде, которые кажутся безобидными (но это не так) 1) Чрезмерное использование private-методов, скрывающее с
+4
Плохие практики в коде, которые кажутся безобидными (но это не так) 1) Чрезмерное использование private-методов, скрывающее сложность Когда private-методов слишком много, это ломает читаемость и разносит логику по коду. Визуально всё выглядит «чисто», но важные логические шаги оказываются скрытыми. Когда это плохо: Вы выносите код в private-методы просто ради самого факта выноса, а не потому что они переиспользуемы или несут отдельный смысл. Как лучше: Выделяйте разные зоны ответственности в отдельные классы или сервисы, которые сотрудничают между собой. 2) Автоматическое добавление private + геттеров/сеттеров по умолчанию Бездумное добавление геттеров и сеттеров превращает ООП в просто «структуры с методами». Это нарушает инкапсуляцию, а не сохраняет её. Вместо этого: ● Открывайте только те геттеры/сеттеры, которые реально нужны для бизнес-логики. ● Вместо сеттеров лучше использовать методы, которые выполняют осмысленные действия с валидацией. 3) Чрезмерное использование static-методов и переменных static-методы кажутся удобными, но убивают тестируемость и гибкость. Они привязывают код к жёсткому глобальному состоянию. Как лучше: Используйте внедрение зависимостей или передавайте нужную конфигурацию явно туда, где она требуется. 4) Слишком большой класс (“God Object”) Огромный класс, который делает всё подряд, превращается в чёрный ящик — его сложно тестировать, менять и понимать. Как лучше: ● Применяйте принцип единственной ответственности (Single Responsibility Principle): у класса должна быть только одна причина для изменения. ● Разделяйте обязанности между меньшими по размеру классами или модулями. 5) Скрытие семантики null / Optional Возврат null или скрытое использование Optional приводит к неожиданным ошибкам во время выполнения. Отсутствие или наличие значения должно быть выражено явно. Как лучше: ● Используйте Optional<T> или другой задокументированный способ, чтобы показать, что результат может отсутствовать. ● Если это действительно ошибка — выбрасывайте чётко определённое исключение. 👉 Java Portal

Разные подходы к структуре REST API: 1) Чистый CRUD-стиль
GET /users  
POST /users  
PUT /users/{id}  
DELETE /users/{id}
👍 Просто и предсказуемо 👎 Начинает хромать при действиях вне CRUD 2) Эндпоинты-действия
POST /users/{id}/deactivate  
POST /orders/{id}/cancel
👍 Ясное указание на сайд-эффекты 👎 Нарушает REST-идеи (глаголы в URL) 3) Вложенные ресурсы
GET /users/{id}/orders  
POST /users/{id}/addresses
👍 Удобно моделирует связи между сущностями 👎 Может вырасти в избыточную иерархию, тяжело поддерживать 4) Плоская структура + фильтры
GET /orders?userId=123  
GET /products?category=books&page=2
👍 Гибкие запросы 👎 Требует строгой валидации query-параметров 5) Версионирование API
GET /v1/users  
Accept: application/vnd.myapp.v2+json
👍 Безопасное развитие API 👎 Увеличивает накладные расходы на поддержку 👉 Java Portal

Некоторые редкие, но ценные паттерны в Java 1. Null Object Pattern (Объект-Заглушка вместо null) ❯ Позволяет избежать проверо
+4
Некоторые редкие, но ценные паттерны в Java 1. Null Object Pattern (Объект-Заглушка вместо null) ❯ Позволяет избежать проверок на null, возвращая объект с "пустым" поведением, реализующий ожидаемый интерфейс. ❯ Помогает держать код чистым, без множества if (obj != null) перед каждым вызовом метода. ❯ Используй, когда возврат null приводит к захламлению условными конструкциями. 2. Parameter Object Pattern (Объект параметров) ❯ Объединяет логически связанные параметры в один объект. ❯ Такой объект удобно прокидывать через разные уровни приложения, обеспечивая согласованность. ❯ Используй, когда у метода слишком много связанных аргументов. 3. Fluent Interface / Method Chaining (Флюент-интерфейс / Цепочка вызовов) ❯ Позволяет вызывать методы цепочкой, улучшая читаемость и выражая намерение кода (особенно в билдерах и конфигурациях). ❯ Используй в билдерах или для декларативной настройки. 4. Execute Around Method Pattern (Шаблон обёртки вокруг действия) ❯ Инкапсулирует логику подготовки и завершения вокруг основного действия. ❯ Гарантирует корректное освобождение ресурсов. ❯ Используй для управления ресурсами (файлы, БД и т.п.). 5. Initialization-on-Demand Holder (ленивый Singleton без synchronized) ❯ Безопасный, потокобезопасный и производительный способ ленивой инициализации Singleton'а без явной синхронизации. ❯ Используй, если нужен быстрый и потокобезопасный синглтон. 👉 Java Portal

Наблюдаемость Java-бэкенда с помощью OpenTelemetry ⏩Читать подробнее 👉 Java Portal | #cтатья
Наблюдаемость Java-бэкенда с помощью OpenTelemetry ⏩Читать подробнее 👉 Java Portal | #cтатья

🔍 Завтра тестовое собеседование с Java-разработчиком 2 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседов
🔍 Завтра тестовое собеседование с Java-разработчиком 2 июля(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 📂 Сергей Чамкин, старший разработчик из Uzum, ex-WildBerries, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Cергей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Сергею Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxP5Lfh

Хаки Java-кодинга, которые стоит знать разработчикам ✓ Используйте Map.ofEntries() для создания неизменяемых мап с нескольким
+4
Хаки Java-кодинга, которые стоит знать разработчикам ✓ Используйте Map.ofEntries() для создания неизменяемых мап с несколькими парами ➣ Почему: короче, безопаснее, неизменяемо — снижает риск случайной мутации. ✓ Используйте Optional.map().orElse() вместо ручной обработки null ➣ Почему: устраняет проверки на null, читается лучше, легко комбинируется с другой логикой. ✓ Используйте Enum.valueOf() + name() для безопасного преобразования enum ➣ Почему: чище и удобнее для сериализации/десериализации enum'ов в API, БД или файлах. ✓ Используйте Comparator.comparing().thenComparing() вместо кастомной логики ➣ Почему: читаемо, понятно, без ошибок в условных сравнениях. ✓ Используйте Optional.ifPresentOrElse() вместо if-else с isPresent() ➣ Почему: выразительнее и чище — больше никаких ручных get() и нагромождений if-else 👉 Java Portal

Проектирование Backend-системы. Система уведомлений Цель —> Разработать систему для доставки уведомлений пользователям через:
Проектирование Backend-системы. Система уведомлений Цель —> Разработать систему для доставки уведомлений пользователям через: ➣ Встроенные уведомления ➣ Push-уведомления (мобильные/веб) ➣ Email С поддержкой: ✓Масштабируемости (миллионы пользователей) ✓Настраиваемых пользовательских предпочтений ✓Надежности, повторных попыток и дедупликации ✓Реального времени и пакетных оповещений Пошаговый сквозной процесс Шаг 1: Срабатывание события ✓ Приложение инициирует событие: ➣ Например, пользователь A лайкнул ваш пост ➣ Отправляется запрос POST на API /notify:
{
  "event_type": "like",
  "actor": "UserA",
  "receiver": "UserB",
  "object": "Post123"
}
Шаг 2: Добавление в очередь уведомлений ➣ API валидирует данные и помещает сообщение в очередь уведомлений (Kafka/RabbitMQ) Шаг 3: Обработка воркером ✓ Воркер извлекает сообщение из очереди: ➣ Получает полную информацию о событии ➣ Обращается к сервису предпочтений: - Подписан ли UserB на уведомления типа "like"? - Хочет email или только in-app? ✓ Создает payload уведомления, например: ✓ "UserA лайкнул ваш пост 'How to scale systems'" Шаг 4: Рассылка по каналам ✓ На основе предпочтений воркер запускает соответствующие каналы: ➣ In-App Writer → сохраняет в БД (для отображения иконки колокольчика) ➣ Push-сервис → отправляет push (мобильный/веб) через FCM/APNs ➣ Email-сервис → ставит email в очередь (через SES/SendGrid) Шаг 5: Отправка и повторные попытки ✓ Сервисы каналов: ➣ Декуплированы для изоляции отказов ➣ Повторяют попытки при сбоях (3–5 раз с экспоненциальной задержкой) ➣ Логируют статус (отправлено, ошибка, пропущено) Шаг 6: Отображение in-app уведомлений ✓ UI вызывает /notifications?user=UserB ✓ Возвращаются N последних уведомлений из БД:
[
  { "text": "UserA лайкнул ваш пост", "read": false, ... }
]
Функции надежности ✓ Гарантированная доставка хотя бы один раз с идемпотентной записью ✓ Повторные попытки с экспоненциальной задержкой ✓ DLQ (Dead Letter Queue) для сообщений с ошибками ✓ Метрики: успех/неудача на сообщение ✓ Алерты при переполнении очереди или всплесках ошибок 👉 Java Portal

🔥 Успех в IT = скорость + знания + окружение Здесь ты найдёшь всё это — коротко, по делу и без воды. Пока другие ищут, где “
🔥 Успех в IT = скорость + знания + окружение Здесь ты найдёшь всё это — коротко, по делу и без воды. Пока другие ищут, где “подглядеть решение”, ты будешь использовать самые передовые инструменты! 🖥 ИИ: t.me/ai_machinelearning_big_data 🖥 Python: t.me/pythonl 🖥 Linux: t.me/linuxacademiya 🖥 C++ t.me/cpluspluc 🖥 Docker: t.me/DevopsDocker 🖥 Хакинг: t.me/linuxkalii 🖥 Devops: t.me/DevOPSitsec 🖥 Data Science: t.me/data_analysis_ml 🖥 Javascript: t.me/javascriptv 🖥 C#: t.me/csharp_ci 🖥 Java: t.me/javatg 🖥 Базы данных: t.me/sqlhub 👣 GO: t.me/Golang_google 🖥 React: t.me/react_tg 👣 Rust: t.me/rust_code 🧠 Нейросети: t.me/vistehno 🖥 PHP: t.me/phpshka 🖥 Android: t.me/android_its 💼 Вакансии: t.me/addlist/_zyy_jQ_QUsyM2Vi

Базовые приёмы экономии памяти в Java 1. Ленивая инициализация "тяжёлых" полей – Используйте lazy initialization, чтобы откла
+3
Базовые приёмы экономии памяти в Java 1. Ленивая инициализация "тяжёлых" полей – Используйте lazy initialization, чтобы откладывать создание объекта до момента, когда он действительно понадобится. 2. Избегайте анонимных внутренних классов в циклах – Каждое такое использование создаёт объект внутреннего класса — это скрытая нагрузка на память. 3. Используйте статические фабричные методы – Они позволяют экономить память за счёт повторного использования уже созданных экземпляров, вместо создания новых при каждом вызове. 4. Применяйте метод intern() – Метод intern() класса String возвращает каноническое представление строки. Используя intern(), можно гарантировать, что одна и та же строка будет представлена в памяти в виде единственного объекта, даже если она создаётся многократно.
String s1 = "hello";
String s2 = "hello".intern();
5. Используйте паттерн Flyweight для повторяющихся неизменяемых данных – Экономит память за счёт разделения общих экземпляров (используется, например, в Integer.valueOf(), Boolean.TRUE и т.п.). 👉 Java Portal

Добавление логирования HTTP-запросов в Spring Boot API ⏩Читать подробнее 👉 Java Portal | #cтатья
Добавление логирования HTTP-запросов в Spring Boot API ⏩Читать подробнее 👉 Java Portal | #cтатья

Давайте разберёмся с Git Merge и Rebase Git предоставляет два мощных инструмента для интеграции изменений из одной ветки (часто feature-ветки) в другую (обычно main): Merge и Rebase Оба инструмента решают одну задачу — объединение кода, но делают это по-разному. ✔️ Git Merge Merge создаёт новый коммит, который фиксирует объединение двух веток. В истории это видно как слияние двух независимых линий разработки в одной точке. Шаги: 1. Переключись на целевую ветку (обычно main) 2. Выполни git merge <feature> — укажи имя исходной ветки Результаты: 🔸Создаётся новый merge-коммит в целевой ветке с ссылками на родительские коммиты 🔸История целевой ветки становится разветвлённой, отражая все слияния 🔸Это более безопасный вариант для командной работы — история изменений сохраняется ✔️ Git Rebase Rebase переписывает историю ветки (обычно feature-ветки), как будто коммиты были сделаны поверх другой ветки (например, main). Получается более линейная история без merge-коммитов. Шаги: 1. Переключись на ветку, которую хочешь ребейзнуть (например, feature) 2. Выполни git rebase <main> Результаты: 🔸Коммиты из feature будут повторно применены на вершину main, создаются новые коммиты с теми же изменениями 🔸Целевая ветка (main) при этом не изменяется 🔸История feature-ветки становится линейной, но её история будет переписана Примечания: После успешного rebase, финальное merge в main часто выполняется как fast-forward, т.к. история выглядит непрерывной Rebase изменяет ветку, на которой ты находишься, а не целевую ветку Итог: merge сохраняет историю как есть → хорошо для командной работы rebase делает историю аккуратной → хорошо для чистоты, но требует осторожности 👉 Java Portal

Sealed-классы и интерфейсы в Java Они позволяют явно контролировать, какие классы могут расширять или реализовывать тип — дел
Sealed-классы и интерфейсы в Java Они позволяют явно контролировать, какие классы могут расширять или реализовывать тип — делая иерархии безопаснее, легче в сопровождении и идеально подходящими для исчерпывающего pattern matching'а Начиная с Java 17, были введены sealed-классы и sealed-интерфейсы как способ ограничить и контролировать иерархию наследования. Как это работает? 🔹Используй модификатор sealed и ключевое слово permits, чтобы явно указать разрешённые подклассы или реализации. 🔹Все разрешённые подтипы должны находиться в одном модуле или пакете и обязаны быть помечены как final, sealed или non-sealed Зачем использовать sealed-классы и интерфейсы? 👉 Более строгая инкапсуляция и контроль над публичным API 👉 Безопасный и предсказуемый код (отлично подходит для pattern matching в switch) 👉 Защита от нежелательного наследования или реализации 👉 Java Portal

ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ Айтишники поймут ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠ ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ

Прокачай производительность своего Java-приложения с помощью мощного кэширования. Узнай, как интегрировать Spring Boot, Redis
Прокачай производительность своего Java-приложения с помощью мощного кэширования. Узнай, как интегрировать Spring Boot, Redis и Docker в этом практическом гайде. Читать сейчас: тык 😈 👉 Java Portal

Все ключевые слова Java в одном месте Java содержит 53 зарезервированных ключевых слова, которые нельзя использовать как имен
Все ключевые слова Java в одном месте Java содержит 53 зарезервированных ключевых слова, которые нельзя использовать как имена переменных, методов или классов — каждое из них выполняет определённую роль в языке. Независимо от того, только ли ты начинаешь изучать Java или готовишься к собеседованию — знание этих ключевых слов обязательно 👉 Java Portal

Ограничение частоты запросов в Spring Boot с помощью Bucket4j Реализация rate limiting в REST API на Spring Boot с использова
Ограничение частоты запросов в Spring Boot с помощью Bucket4j Реализация rate limiting в REST API на Spring Boot с использованием Bucket4j для контроля частоты запросов на пользователя, что повышает масштабируемость API. Подходит для предотвращения злоупотреблений в продакшн-системах • Импортируются классы из Bucket4j, Spring и Java SDK. • Создаётся REST-контроллер с маппингом /api • Для каждого пользователя создаётся бакет с лимитом 5 запросов в минуту. Если бакет позволяет — запрос проходит. Если нет — возвращается 429 статус. • Заглушка для HttpServletResponse, нужна чтобы код можно было запускать без настоящего HTTP-сервера. 👉 Java Portal

Разные способы защиты API-эндпоинтов → API-ключи Клиент отправляет ключ в заголовках или query-параметрах 👍 Просто реализуется 👎 Нет идентификации пользователя, легко утечь → OAuth2 (токены доступа) Механизм авторизации через токены с областью доступа и сроком действия 👍 Тонкая настройка прав доступа, широко поддерживается 👎 Более сложная настройка → JWT (JSON Web Tokens) Самодостаточный токен с наборами claims 👍 Без состояния (stateless), хорошо масштабируется 👎 Сложно отзывать, больше размер → Basic Auth Отправка Base64(username:password) в заголовке 👍 Удобно для быстрого тестирования 👎 Никогда не используйте в продакшене → mTLS (взаимная TLS-аутентификация) И клиент, и сервер проверяют сертификаты друг друга 👍 Высокий уровень доверия и шифрования 👎 Сложная инфраструктура и управление сертификатами Для внутренних сервисов → mTLS + токены с коротким сроком жизни Для публичных API → OAuth2 + scopes (области доступа) Для тестирования/разработки → API-ключи или Basic Auth 👉 Java Portal

Как frontend-разработчику получить оффер в Bigtech? Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте?
Как frontend-разработчику получить оффер в Bigtech? Ты вроде бы уже не джун, но всё равно чувствуешь, что топчешься на месте? Рынок перегрет, требований всё больше, а откликов — всё меньше? На собесах валят на алгоритмах или просят "нарисовать" архитектуру, как будто ты ведущий. При этом вокруг кто-то постоянно получает офферы в Яндекс или VK, а у тебя не получается даже дойти до финального этапа? Хочется стабильности, интересных задач и наконец-то попасть в сильную команду...
Меня зовут Тихон, привет! Я — действующий Frontend-разработчик и ментор. Помогаю устроиться на хорошие позиции в Bigtech и сопровождаю на испытательном сроке.
В своем канале: 👉 публикую видео с решением задач, которые прямо сейчас дают крупные компании на собеседованиях 👉даю примеры по прохождению собеседований 👉разбираю резюме и докручиваю резюме подписчиков 👉и просто создаю дружелюбное, комфортное сообщество, где коллеги всегда готовы подсказать и поддержать 🎁В закрепе тебя ждёт подборка из 60 задач, которые сейчас дают на собеседованиях Яндекс, Т-Банк и другие крупные IT игроки. Подписывайся и получай максимум пользы, а нас уже больше 2000 🤓: https://t.me/+p0ldgDr3Wp5iMWY6 Реклама, ИП Галактионов Тихон Витальевич, инн: 771618975809, erid: 2W5zFK1XXg4

Что такое daemon-поток в Java? Daemon-поток — это фоновый поток, который работает для поддержки пользовательских потоков. При
+1
Что такое daemon-поток в Java? Daemon-поток — это фоновый поток, который работает для поддержки пользовательских потоков. Примеры — сборщик мусора или системы мониторинга. Главное отличие: daemon-потоки не мешают завершению работы JVM. Как только все пользовательские (не-daemon) потоки завершатся, JVM завершится автоматически, даже если daemon-потоки ещё работают. Как создаете daemon-поток? 🔹Создаёте поток как обычно 🔹Вызываете setDaemon(true) до запуска потока 🔹Запускаете поток через start() Как только основной (пользовательский) поток завершится — JVM выключится, даже если daemon-поток всё ещё активен. Используйте daemon-потоки для фоновых сервисов, которые не должны блокировать завершение приложения. Всегда вызывайте setDaemon(true) до запуска 👉 Java Portal

Java Enums — Всё, что нужно знать 1. enum Status { PENDING, APPROVED, REJECTED } → Базовый Enum • Это называется enum (сокращение от enumeration). • Используется для задания фиксированного набора констант (например, состояния заказа, роли пользователя). 2. Status.valueOf("APPROVED") → Преобразование строки в Enum • Бросает исключение, если строка некорректна. • Используется при маппинге из БД, пользовательского ввода или JSON (например, парсинг статуса из запроса). 3. Status.APPROVED.name() → Получить имя как строку • Возвращает имя enum-константы в точности как оно определено. • Используется при логировании, сериализации и т. д. (например, отображение enum как строки в ответе). 4. Status.APPROVED.ordinal() → Получить индекс Enum • Возвращает позицию (начиная с 0). • Используется только если порядок важен (обычно избегается ради стабильности) — например, для ранжирования уровней. 5. for (Status s : Status.values()) → Перебор значений Enum • Используется для итерации по всем константам. • Удобно для UI-дропдаунов, фильтров, пакетной обработки. 6. enum Day { MON, TUE; boolean isWeekend() { return false; } } → Enum с методами • Добавляет поведение к enum. • Используется, если для каждой константы нужна логика (например, isHoliday() для Day). 7. enum Type { BASIC("B"), PREMIUM("P"); private String code; ... } → Enum с полями • Используется для хранения дополнительных данных с каждой константой (например, код из БД, описание). 8. Enum с абстрактным методом
enum Mode {
  ON { void act() { /* что-то делаем */ } },
  OFF { void act() { /* ничего не делаем */ } };
  abstract void act();
}
• Называется поведенческим enum'ом. • Используется для логики, подобной конечному автомату (например, стратегии на константу). 9. EnumSet.of(Status.APPROVED) → EnumSet • Высокопроизводительное множество для enum. • Используйте вместо HashSet<Enum> (например, для фильтрации флагов или ролей). 10. EnumMap<Status, String> → EnumMap • Эффективная key-value структура, использующая enum в качестве ключа. • Быстрее и легче, чем HashMap<Enum, X> (например, для меток или конфигураций по статусу). 11. switch(status) → Enum в операторе switch • Работает с enum'ами нативно. • Используется для route-логики (например, обработки каждого статуса по-своему). 👉 Java Portal