Easy Java
5.22K subscribers
311 photos
51 videos
463 links
Лучшие обучающие материалы и другие полезности для Java-разработчиков.

Сотрудничество: @heywan_n1

Цены: @heywan_media

Реклама на бирже: https://telega.in/c/+r8kkGSypBY84MmIy
Download Telegram
Какой ответ правильный?
Anonymous Quiz
61%
A
21%
B
11%
C
7%
D
👍4
Что это такое?

В Java паттерн Singleton (Одиночка) используется для того, чтобы гарантировать существование только одного экземпляра класса и предоставить к нему глобальную точку доступа. Один из лучших способов реализации паттерна Singleton в современной Java — использовать enum. Это гарантирует, что экземпляр будет создан только один раз, а также позволяет защититься от проблем многозадачности (multi-threading) и сериализации.

Почему это лучший способ?

1. Гарантированная защита от сериализации: Enum типы в Java автоматически обеспечивают защиту от повторной сериализации, что означает, что даже если вы сериализуете и десериализуете объект, он всегда будет одним и тем же экземпляром.

2. Легкость использования: Просто создайте enum с одним элементом, и он будет работать как Singleton.

3. Простота кода: Реализация паттерна через enum гораздо проще и понятнее, чем традиционные способы через класс с приватным конструктором и методами для получения экземпляра.

4. Защита от многопоточности: Enum в Java гарантированно потокобезопасен.

Как использовать Singleton через enum?

Пример кода:
public enum Singleton {
INSTANCE;

// Пример поля
private int value = 42;

// Пример метода
public int getValue() {
return value;
}

public void setValue(int value) {
this.value = value;
}
}


Объяснение:
INSTANCE — это единственный экземпляр вашего класса. Используется стандартный механизм enum для создания этого экземпляра.
Все поля и методы класса могут быть такими же, как в обычном классе.
Для доступа к экземпляру используйте Singleton.INSTANCE

Пример использования:
public class Main {
public static void main(String[] args) {
// Получение доступа к единственному экземпляру
Singleton singleton = Singleton.INSTANCE;

// Использование метода экземпляра
System.out.println(singleton.getValue()); // Выводит 42

// Изменение значения
singleton.setValue(100);
System.out.println(singleton.getValue()); // Выводит 100
}
}


Почему это удобно?

1. Безопасность при многозадачности: В многозадачной среде enum-тип автоматически позаботится о том, чтобы не создать несколько экземпляров.

2. Никаких проблем с рефлексией: При обычной реализации через класс можно создать новые экземпляры с помощью рефлексии, что нарушает принцип Singleton. В случае enum этого не произойдет.

3. Простота тестирования и расширяемости: Такой подход легко тестировать и можно добавлять новые функции без изменения структуры самого паттерна.

Когда использовать?

Использование enum для реализации Singleton рекомендуется, когда вам нужно:

— Обеспечить, чтобы экземпляр был создан только один раз и не был доступен для повторного создания.

— Потребность в потокобезопасности и защите от возможных ошибок сериализации.

— Желание использовать компактное и понятное решение без дополнительных сложностей.


📍 Теги: #Java #Singleton #Паттерны
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍43
Какой ответ правильный?
Anonymous Quiz
32%
A
56%
B
7%
C
5%
D
5
👣 Мини-курс по основам API

Из этого курса вы узнаете, что собой представляет API, как работает и зачем нужен. Рассмотрим примеры использования, способы вызова и тенденции развития.

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


Вас ожидают: 11 уроков, 10 тестов.


🔤 Пройти курс 🔤

➡️ Easy Java | #Курсы #API
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Media is too big
VIEW IN TELEGRAM
👩‍💻 Почему Java остаётся топовым языком для бизнеса?

В этом видеоролике автор подробно объясняет, зачем Java нужна бизнесу и почему она до сих пор остается одним из ведущих языков программирования.


🔤 Ссылка на источник 🔤

Easy Java |#Видео
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣25
🟢 Частая проблема: Как правильно переопределить equals() и hashCode()?

Многие новички в Java совершают ошибку, забывая, что equals() и hashCode() должны быть согласованы. Это критически важно, если объект используется в HashSet, HashMap и других коллекциях.

🚫 Ошибочный подход :
class User {
private String name;

public User(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return name.equals(user.name);
}
}


Ошибка: Не переопределён hashCode(). Это вызовет проблемы при использовании объекта в HashSet/HashMap!

✔️ Правильный подход :
import java.util.Objects;

class User {
private String name;

public User(String name) {
this.name = name;
}

@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
return Objects.equals(name, user.name);
}

@Override
public int hashCode() {
return Objects.hash(name);
}
}

✔️ Теперь объект будет корректно работать в HashSet и HashMap!

👍 Разбор:

✔️ Если переопределяешь equals(), всегда переопредели hashCode()!
✔️ Используй Objects.equals() и Objects.hash() для безопасности.
✔️В коллекциях HashSet и HashMap объекты сравниваются по hashCode() и затем по equals().

А А вы знали об этом?

Если нет поставьте 👍
Если да поставьте
🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍101
✔️ Лучшие практики создания отказоустойчивых систем

Тут объясняют, как серверный код на Python и Java может переживать сбои: повторы, таймауты, graceful degradation и прочие лайфхаки для стабильной жизни.

🔗 Читать статью

➡️ Easy Java | #статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Какой ответ правильный?
Anonymous Quiz
78%
1
9%
2
7%
3
7%
4
Please open Telegram to view this post
VIEW IN TELEGRAM
😭21👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
👩‍💻 Что такое конструктор в Java?

Конструктор — это особый метод, который автоматически запускается, когда создаётся объект. С его помощью удобно задавать значения для полей объекта.

• Имя конструктора всегда как у класса
• Он не возвращает значение
• Можно сделать несколько конструкторов с разными параметрами

⚡️ Пример:

public class User {
String name;
int age;

// Конструктор
public User(String name, int age) {
this.name = name;
this.age = age;
}

void printInfo() {
System.out.println(name + " — " + age + " лет");
}

public static void main(String[] args) {
User u = new User("Анна", 25);
u.printInfo(); // Анна — 25 лет
}
}


👀 Теперь при создании объекта User мы сразу передаём имя и возраст. Это удобно и сокращает лишний код.

➡️ Easy Java | #Теория
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥101👍1
📖 Не сказ, а быль: Java-дев среди сисадминов

Записки бывшего джависта, попавшего в DevOps-мир с кластером под мышкой. В статье — настройка JVM в k8s, выбор хранилища и чуть боли. Возможно, даже смешно.

Читать статью

➡️ Easy Java | #Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍2
Ответ:
Anonymous Quiz
12%
1
65%
2
10%
3
13%
4
👍73