Вопросы с собеседования 👩💻
Что такое try-catch блок?
Что такое try-catch блок?
Anonymous Quiz
2%
Это блок для создания потоков.
95%
Это блок для обработки исключений.
0%
Это блок для создания анонимных классов.
2%
Это блок для синхронизации потоков.
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотации для работы с синхронизацией
Аннотация @Synchronized — управление синхронизацией
Аннотация @Synchronized позволяет создавать синхронизированные методы, аналогично использованию ключевого слова synchronized в Java. Однако @Synchronized предоставляет больше гибкости, так как позволяет синхронизировать методы на разных объектах.
Пример использования:
Как это работает под капотом?
Lombok генерирует код, который использует блоки synchronized для обеспечения потокобезопасности. Вот что происходит:
Генерация байт-кода:
Если аннотация @Synchronized используется без параметров, Lombok создает скрытое поле $lock и синхронизирует метод на этом поле.
Если указан параметр (например, @Synchronized("lock")), Lombok синхронизирует метод на указанном объекте.
Пример сгенерированного кода:
Создание скрытых полей:
Если объект для синхронизации не указан, Lombok создает скрытое поле $lock типа Object. Это поле используется для синхронизации всех методов, помеченных @Synchronized без параметров.
Нюансы использования
Производительность:
Использование @Synchronized может привести к снижению производительности, так как синхронизация блокирует выполнение кода в других потоках. Это особенно важно в высоконагруженных приложениях.
Взаимодействие с другими аннотациями:
@Synchronized можно комбинировать с другими аннотациями Lombok, такими как @Getter, @Setter, @Data. Однако будьте осторожны при использовании с аннотациями, которые генерируют методы (например, @Builder), так как это может привести к неожиданному поведению.
Ограничение на объекты синхронизации:
Объект, указанный в @Synchronized("lock"), должен быть финальным (final), чтобы избежать изменений во время выполнения. В противном случае синхронизация может работать некорректно.
Проблемы с наследованием:
Если метод, помеченный @Synchronized, переопределяется в подклассе, синхронизация может не работать, так как Lombok генерирует код только для текущего класса.
Альтернативы
Вместо @Synchronized можно использовать более современные механизмы синхронизации, такие как ReentrantLock или StampedLock, которые предоставляют больше гибкости и контроля.
#Java #Training #Spring #Lombok #Synchronized
Аннотация @Synchronized — управление синхронизацией
Аннотация @Synchronized позволяет создавать синхронизированные методы, аналогично использованию ключевого слова synchronized в Java. Однако @Synchronized предоставляет больше гибкости, так как позволяет синхронизировать методы на разных объектах.
Пример использования:
import lombok.Synchronized;
public class Counter {
private int count = 0;
@Synchronized
public void increment() {
count++;
}
@Synchronized("lock")
public void decrement() {
count--;
}
private final Object lock = new Object();
}
Как это работает под капотом?
Lombok генерирует код, который использует блоки synchronized для обеспечения потокобезопасности. Вот что происходит:
Генерация байт-кода:
Если аннотация @Synchronized используется без параметров, Lombok создает скрытое поле $lock и синхронизирует метод на этом поле.
Если указан параметр (например, @Synchronized("lock")), Lombok синхронизирует метод на указанном объекте.
Пример сгенерированного кода:
public class Counter {
private int count = 0;
private final Object $lock = new Object(); // Скрытое поле для синхронизации
private final Object lock = new Object();
public void increment() {
synchronized ($lock) {
count++;
}
}
public void decrement() {
synchronized (lock) {
count--;
}
}
}
Создание скрытых полей:
Если объект для синхронизации не указан, Lombok создает скрытое поле $lock типа Object. Это поле используется для синхронизации всех методов, помеченных @Synchronized без параметров.
Нюансы использования
Производительность:
Использование @Synchronized может привести к снижению производительности, так как синхронизация блокирует выполнение кода в других потоках. Это особенно важно в высоконагруженных приложениях.
Взаимодействие с другими аннотациями:
@Synchronized можно комбинировать с другими аннотациями Lombok, такими как @Getter, @Setter, @Data. Однако будьте осторожны при использовании с аннотациями, которые генерируют методы (например, @Builder), так как это может привести к неожиданному поведению.
Ограничение на объекты синхронизации:
Объект, указанный в @Synchronized("lock"), должен быть финальным (final), чтобы избежать изменений во время выполнения. В противном случае синхронизация может работать некорректно.
Проблемы с наследованием:
Если метод, помеченный @Synchronized, переопределяется в подклассе, синхронизация может не работать, так как Lombok генерирует код только для текущего класса.
Альтернативы
Вместо @Synchronized можно использовать более современные механизмы синхронизации, такие как ReentrantLock или StampedLock, которые предоставляют больше гибкости и контроля.
#Java #Training #Spring #Lombok #Synchronized
Аннотации для работы с данными — @Value и @With
Аннотация @Value
Аннотация @Value используется для создания неизменяемых (immutable) объектов. Она объединяет функциональность нескольких аннотаций:
@Getter — генерирует геттеры для всех полей.
@AllArgsConstructor — генерирует конструктор со всеми параметрами.
@ToString — генерирует метод toString().
@EqualsAndHashCode — генерирует методы equals() и hashCode().
Все поля класса становятся final.
Пример использования:
Как это работает под капотом:
Генерация кода:
Lombok создает класс с final-полями, геттерами, конструктором, toString(), equals() и hashCode().
Пример сгенерированного кода:
Нюансы использования:
Класс становится неизменяемым: все поля final, сеттеры не генерируются.
Если нужно изменить значение поля, придется создавать новый объект.
Нельзя использовать @Value с @Setter или @Data, так как они конфликтуют.
Взаимодействие с другими аннотациями:
@Value можно комбинировать с @Builder, чтобы добавить поддержку паттерна Builder для создания объектов.
Нельзя использовать с @NoArgsConstructor, так как все поля final и должны быть инициализированы.
Аннотация @With
Аннотация @With генерирует методы для создания копии объекта с измененным значением одного поля. Это полезно для работы с неизменяемыми объектами.
Пример использования:
Как это работает под капотом
Генерация кода:
Lombok создает методы withFieldName() для каждого поля.
Пример сгенерированного кода:
Нюансы использования
@With работает только с final-полями, так как предназначен для неизменяемых объектов.
Если поле не final, Lombok выдаст предупреждение.
Можно использовать с @Value для создания полностью неизменяемых объектов.
Взаимодействие с другими аннотациями:
@With можно комбинировать с @Value, @Builder и другими аннотациями Lombok.
Нельзя использовать с @Data, так как @Data генерирует сеттеры, что противоречит идее неизменяемости.
#Java #Training #Spring #Lombok #With #Value
Аннотация @Value
Аннотация @Value используется для создания неизменяемых (immutable) объектов. Она объединяет функциональность нескольких аннотаций:
@Getter — генерирует геттеры для всех полей.
@AllArgsConstructor — генерирует конструктор со всеми параметрами.
@ToString — генерирует метод toString().
@EqualsAndHashCode — генерирует методы equals() и hashCode().
Все поля класса становятся final.
Пример использования:
import lombok.Value;
@Value
public class User {
String name;
int age;
}
Как это работает под капотом:
Генерация кода:
Lombok создает класс с final-полями, геттерами, конструктором, toString(), equals() и hashCode().
Пример сгенерированного кода:
public final class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "User(name=" + this.name + ", age=" + this.age + ")";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return age == user.age && Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Нюансы использования:
Класс становится неизменяемым: все поля final, сеттеры не генерируются.
Если нужно изменить значение поля, придется создавать новый объект.
Нельзя использовать @Value с @Setter или @Data, так как они конфликтуют.
Взаимодействие с другими аннотациями:
@Value можно комбинировать с @Builder, чтобы добавить поддержку паттерна Builder для создания объектов.
Нельзя использовать с @NoArgsConstructor, так как все поля final и должны быть инициализированы.
Аннотация @With
Аннотация @With генерирует методы для создания копии объекта с измененным значением одного поля. Это полезно для работы с неизменяемыми объектами.
Пример использования:
import lombok.With;
@With
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
// Использование:
User user = new User("John", 30);
User newUser = user.withAge(31); // Создает новый объект с измененным возрастом
Как это работает под капотом
Генерация кода:
Lombok создает методы withFieldName() для каждого поля.
Пример сгенерированного кода:
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User withName(String name) {
return this.name == name ? this : new User(name, this.age);
}
public User withAge(int age) {
return this.age == age ? this : new User(this.name, age);
}
}
Нюансы использования
@With работает только с final-полями, так как предназначен для неизменяемых объектов.
Если поле не final, Lombok выдаст предупреждение.
Можно использовать с @Value для создания полностью неизменяемых объектов.
Взаимодействие с другими аннотациями:
@With можно комбинировать с @Value, @Builder и другими аннотациями Lombok.
Нельзя использовать с @Data, так как @Data генерирует сеттеры, что противоречит идее неизменяемости.
#Java #Training #Spring #Lombok #With #Value
Что выведет код?
#Tasks
public class Task160125_1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
sb.append(" world").delete(5, 11).insert(5, " java");
System.out.println(sb);
}
}
#Tasks
Варианты ответа:
Anonymous Quiz
9%
hello world
23%
hello java world
69%
hello java
0%
hello
0%
java for begginer
Вопросы с собеседования 👩💻
Что такое interface в Java?
Что такое interface в Java?
Anonymous Quiz
84%
Это контракт, который определяет методы, которые должны быть реализованы в классе.
14%
Это абстрактный класс с реализованными методами.
3%
Это класс, который нельзя наследовать.
0%
Это класс с приватными методами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание кастомных аннотаций с использованием Lombok
Lombok позволяет создавать кастомные аннотации, которые объединяют несколько аннотаций Lombok в одну. Это полезно, если вы часто используете одни и те же комбинации аннотаций.
Пример создания кастомной аннотации
Шаг 1: Создайте аннотацию:
Шаг 2: Используйте аннотацию:
Результат:
Класс User будет иметь все функциональности @Value, @With и @Accessors(fluent = true).
Как это работает под капотом
Компиляция Java-кода:
Когда вы компилируете код, Lombok анализирует кастомную аннотацию и применяет все аннотации, которые она объединяет.
Генерация кода:
Lombok генерирует код для каждой аннотации, указанной в кастомной аннотации.
Например, для @ImmutableUser будет сгенерирован код для @Value, @With и @Accessors(fluent = true).
Нюансы использования кастомных аннотаций
Ограничения:
Кастомные аннотации могут объединять только аннотации Lombok.
Нельзя использовать кастомные аннотации для добавления новой функциональности, только для комбинирования существующей.
Взаимодействие с другими аннотациями:
Кастомные аннотации можно комбинировать с другими аннотациями Lombok.
Например, можно добавить @Builder к кастомной аннотации:
Проблемы:
Если кастомная аннотация объединяет конфликтующие аннотации (например, @Value и @Data), это вызовет ошибку компиляции.
Убедитесь, что все аннотации в кастомной аннотации совместимы друг с другом.
#Java #Training #Spring #Lombok #CustomAnnotation
Lombok позволяет создавать кастомные аннотации, которые объединяют несколько аннотаций Lombok в одну. Это полезно, если вы часто используете одни и те же комбинации аннотаций.
Пример создания кастомной аннотации
Шаг 1: Создайте аннотацию:
import lombok.Value;
import lombok.With;
import lombok.experimental.Accessors;
@Value
@With
@Accessors(fluent = true)
public @interface ImmutableUser {
}
Шаг 2: Используйте аннотацию:
@ImmutableUser
public class User {
String name;
int age;
}
Результат:
Класс User будет иметь все функциональности @Value, @With и @Accessors(fluent = true).
Как это работает под капотом
Компиляция Java-кода:
Когда вы компилируете код, Lombok анализирует кастомную аннотацию и применяет все аннотации, которые она объединяет.
Генерация кода:
Lombok генерирует код для каждой аннотации, указанной в кастомной аннотации.
Например, для @ImmutableUser будет сгенерирован код для @Value, @With и @Accessors(fluent = true).
Нюансы использования кастомных аннотаций
Ограничения:
Кастомные аннотации могут объединять только аннотации Lombok.
Нельзя использовать кастомные аннотации для добавления новой функциональности, только для комбинирования существующей.
Взаимодействие с другими аннотациями:
Кастомные аннотации можно комбинировать с другими аннотациями Lombok.
Например, можно добавить @Builder к кастомной аннотации:
@Value
@With
@Builder
public @interface ImmutableUserWithBuilder {
}
Проблемы:
Если кастомная аннотация объединяет конфликтующие аннотации (например, @Value и @Data), это вызовет ошибку компиляции.
Убедитесь, что все аннотации в кастомной аннотации совместимы друг с другом.
#Java #Training #Spring #Lombok #CustomAnnotation
Аннотации Lombok для работы с ресурсами, делегированием и утилитарными классами
Аннотация @Cleanup
Аннотация @Cleanup автоматически закрывает ресурсы, такие как потоки, сокеты или соединения с базой данных, после их использования. Это избавляет от необходимости вручную вызывать метод close().
Пример использования:
Как это работает под капотом:
Lombok оборачивает использование ресурса в блок try-finally и вызывает метод close() в блоке finally.
Сгенерированный код:
Нюансы использования:
Ресурс должен реализовывать интерфейс java.io.Closeable или java.lang.AutoCloseable.
Если метод close() выбрасывает исключение, оно будет подавлено (если не указано иное).
Аннотация @Delegate
Аннотация @Delegate позволяет делегировать вызовы методов другому объекту. Это полезно для реализации паттерна "делегирование" вместо наследования.
Пример использования:
Как это работает под капотом:
Lombok генерирует методы, которые делегируют вызовы к указанному объекту.
Сгенерированный код:
Нюансы использования:
Можно делегировать только методы интерфейсов или конкретных классов.
Если класс реализует несколько интерфейсов, можно указать, какие из них делегировать:
Аннотация @UtilityClass
Аннотация @UtilityClass создает утилитарный класс, в котором все методы и поля становятся статическими, а конструктор — приватным.
Пример использования:
Как это работает под капотом:
Lombok делает класс финальным, генерирует приватный конструктор и делает все методы и поля статическими.
Сгенерированный код:
Нюансы использования:
Класс становится финальным, и его нельзя наследовать.
Конструктор приватный, что предотвращает создание экземпляров класса.
Аннотация @FieldDefaults
Аннотация @FieldDefaults управляет модификаторами доступа полей, например, автоматически добавляет final или private.
Пример использования:
Как это работает под капотом:
Lombok добавляет указанные модификаторы доступа ко всем полям класса.
Сгенерированный код:
Нюансы использования:
Можно указать уровень доступа (PRIVATE, PUBLIC, PROTECTED) и добавить final к полям.
Если поле уже имеет модификатор доступа, он не будет изменен.
#Java #Training #Spring #Lombok #Cleanup #Delegate #UtilityClass #FieldDefaults
Аннотация @Cleanup
Аннотация @Cleanup автоматически закрывает ресурсы, такие как потоки, сокеты или соединения с базой данных, после их использования. Это избавляет от необходимости вручную вызывать метод close().
Пример использования:
import lombok.Cleanup;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class FileService {
public void readFile(String path) throws IOException {
@Cleanup InputStream inputStream = new FileInputStream(path);
// Использование inputStream
}
}
Как это работает под капотом:
Lombok оборачивает использование ресурса в блок try-finally и вызывает метод close() в блоке finally.
Сгенерированный код:
public void readFile(String path) throws IOException {
InputStream inputStream = new FileInputStream(path);
try {
// Использование inputStream
} finally {
if (inputStream != null) {
inputStream.close();
}
}
}
Нюансы использования:
Ресурс должен реализовывать интерфейс java.io.Closeable или java.lang.AutoCloseable.
Если метод close() выбрасывает исключение, оно будет подавлено (если не указано иное).
Аннотация @Delegate
Аннотация @Delegate позволяет делегировать вызовы методов другому объекту. Это полезно для реализации паттерна "делегирование" вместо наследования.
Пример использования:
import lombok.experimental.Delegate;
public class UserService {
@Delegate
private final UserRepository userRepository = new UserRepository();
// Дополнительные методы
}
Как это работает под капотом:
Lombok генерирует методы, которые делегируют вызовы к указанному объекту.
Сгенерированный код:
public class UserService {
private final UserRepository userRepository = new UserRepository();
public void save(User user) {
userRepository.save(user);
}
public User findById(Long id) {
return userRepository.findById(id);
}
}
Нюансы использования:
Можно делегировать только методы интерфейсов или конкретных классов.
Если класс реализует несколько интерфейсов, можно указать, какие из них делегировать:
@Delegate(types = {UserRepository.class, AnotherInterface.class})
Аннотация @UtilityClass
Аннотация @UtilityClass создает утилитарный класс, в котором все методы и поля становятся статическими, а конструктор — приватным.
Пример использования:
import lombok.experimental.UtilityClass;
@UtilityClass
public class StringUtils {
public boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
}
Как это работает под капотом:
Lombok делает класс финальным, генерирует приватный конструктор и делает все методы и поля статическими.
Сгенерированный код:
public final class StringUtils {
private StringUtils() {
throw new UnsupportedOperationException("Utility class");
}
public static boolean isEmpty(String str) {
return str == null || str.isEmpty();
}
}
Нюансы использования:
Класс становится финальным, и его нельзя наследовать.
Конструктор приватный, что предотвращает создание экземпляров класса.
Аннотация @FieldDefaults
Аннотация @FieldDefaults управляет модификаторами доступа полей, например, автоматически добавляет final или private.
Пример использования:
import lombok.experimental.FieldDefaults;
import lombok.AccessLevel;
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true)
public class User {
String name;
int age;
}
Как это работает под капотом:
Lombok добавляет указанные модификаторы доступа ко всем полям класса.
Сгенерированный код:
public class User {
private final String name;
private final int age;
}
Нюансы использования:
Можно указать уровень доступа (PRIVATE, PUBLIC, PROTECTED) и добавить final к полям.
Если поле уже имеет модификатор доступа, он не будет изменен.
#Java #Training #Spring #Lombok #Cleanup #Delegate #UtilityClass #FieldDefaults
Что выведет код?
#Tasks
public class Task170125_1 {
public static void main(String[] args) {
int i = 0;
while (i++ < 5) {
if (i == 3) continue;
System.out.print(i + " ");
}
}
}
#Tasks
Вопросы с собеседования 👩💻
Что такое polymorphism (полиморфизм) в Java?
Что такое polymorphism (полиморфизм) в Java?
Anonymous Quiz
66%
Это возможность использовать один интерфейс для разных типов данных.
2%
Это возможность создавать несколько конструкторов в классе.
32%
Это возможность создавать несколько методов с одним именем.
0%
Это возможность создавать анонимные классы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Продвинутые аннотации Lombok и лучшие практики
Аннотация @ExtensionMethod
Аннотация @ExtensionMethod позволяет добавлять методы-расширения к существующим классам. Это похоже на extension-методы в Kotlin или C#.
Пример использования:
Как это работает под капотом:
Lombok преобразует вызовы методов-расширений в вызовы статических методов.
Сгенерированный код:
Нюансы использования:
Методы-расширения должны быть статическими.
Аннотация находится в экспериментальном статусе и может измениться в будущем.
Аннотация @Accessors
Аннотация @Accessors настраивает поведение геттеров и сеттеров, например, позволяет создавать цепочные сеттеры.
Пример использования:
Как это работает под капотом:
Lombok генерирует сеттеры, которые возвращают this, что позволяет использовать цепочки вызовов.
Сгенерированный код:
Нюансы использования:
Можно настроить префиксы для геттеров и сеттеров:
Аннотация @Wither
Аннотация @Wither создает методы для создания копии объекта с измененным значением одного поля. Это аналог @With, но находится в экспериментальном статусе.
Пример использования:
Как это работает под капотом:
Lombok генерирует методы withFieldName() для каждого поля.
Сгенерированный код:
Нюансы использования:
Работает только с final-полями.
Находится в экспериментальном статусе.
Аннотация @Helper
Аннотация @Helper создает локальные вспомогательные классы внутри методов.
Пример использования:
Как это работает под капотом:
Lombok создает локальный класс, который можно использовать внутри метода.
Сгенерированный код:
Нюансы использования:
Находится в экспериментальном статусе.
Полезно для организации кода внутри методов.
#Java #Training #Spring #Lombok #ExtensionMethod #Accessors #Wither #Helper
Аннотация @ExtensionMethod
Аннотация @ExtensionMethod позволяет добавлять методы-расширения к существующим классам. Это похоже на extension-методы в Kotlin или C#.
Пример использования:
import lombok.experimental.ExtensionMethod;
import java.util.Collections;
@ExtensionMethod(Collections.class)
public class ListUtils {
public void example() {
java.util.List<String> list = new java.util.ArrayList<>();
list.add("Hello");
list = unmodifiableList(list); // Метод из Collections
}
}
Как это работает под капотом:
Lombok преобразует вызовы методов-расширений в вызовы статических методов.
Сгенерированный код:
public class ListUtils {
public void example() {
java.util.List<String> list = new java.util.ArrayList<>();
list.add("Hello");
list = Collections.unmodifiableList(list);
}
}
Нюансы использования:
Методы-расширения должны быть статическими.
Аннотация находится в экспериментальном статусе и может измениться в будущем.
Аннотация @Accessors
Аннотация @Accessors настраивает поведение геттеров и сеттеров, например, позволяет создавать цепочные сеттеры.
Пример использования:
import lombok.experimental.Accessors;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Accessors(chain = true)
public class User {
private String name;
private int age;
}
// Использование:
User user = new User().setName("John").setAge(30);
Как это работает под капотом:
Lombok генерирует сеттеры, которые возвращают this, что позволяет использовать цепочки вызовов.
Сгенерированный код:
public class User {
private String name;
private int age;
public User setName(String name) {
this.name = name;
return this;
}
public User setAge(int age) {
this.age = age;
return this;
}
}
Нюансы использования:
Можно настроить префиксы для геттеров и сеттеров:
@Accessors(prefix = "m_")
private String m_name;
Аннотация @Wither
Аннотация @Wither создает методы для создания копии объекта с измененным значением одного поля. Это аналог @With, но находится в экспериментальном статусе.
Пример использования:
import lombok.experimental.Wither;
@Wither
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
// Использование:
User user = new User("John", 30);
User newUser = user.withAge(31);
Как это работает под капотом:
Lombok генерирует методы withFieldName() для каждого поля.
Сгенерированный код:
public class User {
private final String name;
private final int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public User withName(String name) {
return this.name == name ? this : new User(name, this.age);
}
public User withAge(int age) {
return this.age == age ? this : new User(this.name, age);
}
}
Нюансы использования:
Работает только с final-полями.
Находится в экспериментальном статусе.
Аннотация @Helper
Аннотация @Helper создает локальные вспомогательные классы внутри методов.
Пример использования:
import lombok.experimental.Helper;
public class Example {
public void exampleMethod() {
@Helper
class LocalHelper {
void help() {
System.out.println("Helping!");
}
}
new LocalHelper().help();
}
}
Как это работает под капотом:
Lombok создает локальный класс, который можно использовать внутри метода.
Сгенерированный код:
public class Example {
public void exampleMethod() {
class LocalHelper {
void help() {
System.out.println("Helping!");
}
}
new LocalHelper().help();
}
}
Нюансы использования:
Находится в экспериментальном статусе.
Полезно для организации кода внутри методов.
#Java #Training #Spring #Lombok #ExtensionMethod #Accessors #Wither #Helper
Лучшие практики использования Lombok
Когда использовать Lombok:
Для сокращения шаблонного кода (геттеры, сеттеры, конструкторы).
Для улучшения читаемости кода.
Как избежать злоупотребления:
Не используйте Lombok для сложной логики.
Избегайте чрезмерного использования аннотаций, таких как @Data или @AllArgsConstructor.
Совместимость с другими библиотеками:
Lombok может конфликтовать с Jackson, Hibernate и другими библиотеками. Будьте осторожны с аннотациями, которые генерируют методы.
Проблемы и ограничения Lombok
Проблемы с поддержкой в IDE:
Некоторые IDE могут некорректно обрабатывать код с Lombok. Убедитесь, что плагин Lombok установлен и настроен.
Ограничения при использовании с другими инструментами:
Например, Jackson может не работать с @Data, если не настроены правильные геттеры и сеттеры.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
#Java #Training #Spring #Lombok #Best_practices
Когда использовать Lombok:
Для сокращения шаблонного кода (геттеры, сеттеры, конструкторы).
Для улучшения читаемости кода.
Как избежать злоупотребления:
Не используйте Lombok для сложной логики.
Избегайте чрезмерного использования аннотаций, таких как @Data или @AllArgsConstructor.
Совместимость с другими библиотеками:
Lombok может конфликтовать с Jackson, Hibernate и другими библиотеками. Будьте осторожны с аннотациями, которые генерируют методы.
Проблемы и ограничения Lombok
Проблемы с поддержкой в IDE:
Некоторые IDE могут некорректно обрабатывать код с Lombok. Убедитесь, что плагин Lombok установлен и настроен.
Ограничения при использовании с другими инструментами:
Например, Jackson может не работать с @Data, если не настроены правильные геттеры и сеттеры.
Отладка:
Поскольку сгенерированный код не отображается в исходниках, отладка может быть сложнее. Убедитесь, что ваша IDE поддерживает Lombok.
#Java #Training #Spring #Lombok #Best_practices
Всем доброго субботнего утра! ☀️
Как планируете провести выходные?
А я на завтра ничего не подготовил... Может кто хочет что-нибудь показать?🧐
Кроме этого, у нас знаменательное событие - канал устойчиво достиг количества в5⃣ 0⃣ 0️⃣ подписчиков 🥳
Много это или мало? Лично для меня - огромно!
Вспоминая как начинался этот канал с 15 подписчиками из интенсива JavaRush, сейчас цифра 500 человек воспринимается как значительное достижение.
Хотелось бы сказать "Спасибо🙂 " каждому, кто осознанно приписывает себя в постоянный состав подписчиков, тех кто не стесняясь приходит на воскресные встречи и принимает непосредственное участие в жизни канала.
Я рад что вы со мной.🤝
А канал однозначно будет развиваться дальше. После изучения Java Core и Spring, пройдемся по фраймворкам с которыми взаимодействуешь каждый день, потом более редким, но эффективным и так далее... Будем однозначно встречаться по воскресениям и писать что-то злободневное для новичков😁
Уверен что совместно, мы сделаем наш канал отличным подспорьем для развития Javистов-новичков, а так же платформой где можно пообщаться и узнать что-то новое!👍
И не стесняйтесь что-то предлагать для развития канала!
Я не SMM-щик и в силу того, что все это делаю один, мне элементарно порой не хватает времени на свежие идеи😎
Как планируете провести выходные?
А я на завтра ничего не подготовил... Может кто хочет что-нибудь показать?
Кроме этого, у нас знаменательное событие - канал устойчиво достиг количества в
Много это или мало? Лично для меня - огромно!
Вспоминая как начинался этот канал с 15 подписчиками из интенсива JavaRush, сейчас цифра 500 человек воспринимается как значительное достижение.
Хотелось бы сказать "Спасибо
Я рад что вы со мной.
А канал однозначно будет развиваться дальше. После изучения Java Core и Spring, пройдемся по фраймворкам с которыми взаимодействуешь каждый день, потом более редким, но эффективным и так далее... Будем однозначно встречаться по воскресениям и писать что-то злободневное для новичков
Уверен что совместно, мы сделаем наш канал отличным подспорьем для развития Javистов-новичков, а так же платформой где можно пообщаться и узнать что-то новое!
И не стесняйтесь что-то предлагать для развития канала!
Я не SMM-щик и в силу того, что все это делаю один, мне элементарно порой не хватает времени на свежие идеи
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Всем привет! 🖐
Сегодня, как всегда в 16:00 по МСК, я организую встречу в Яндекс.Телемост.
Сегодня темы встречи нет, пообсуждаем как космические корабли бороздят просторы вселенной...🤣
Приходите, будет неинтересно😏
😁 😁 😁
Сегодня, как всегда в 16:00 по МСК, я организую встречу в Яндекс.Телемост.
Сегодня темы встречи нет, пообсуждаем как космические корабли бороздят просторы вселенной...
Приходите, будет неинтересно
Please open Telegram to view this post
VIEW IN TELEGRAM