Вопросы с собеседования 👩💻
Что такое HashMap?
Что такое HashMap?
Anonymous Quiz
4%
Это коллекция, которая хранит элементы в порядке добавления.
2%
Это потокобезопасная коллекция.
4%
Это интерфейс для работы с коллекциями.
89%
Это коллекция, которая хранит пары ключ-значение.
Please open Telegram to view this post
VIEW IN TELEGRAM
Аннотации для логирования
Аннотация @Slf4j
Эта аннотация автоматически создает логгер (SLF4J) для класса. Она избавляет от необходимости вручную создавать поле для логгера.
Пример использования:
Как это работает:
Lombok генерирует поле log типа Logger, которое можно использовать для логирования. Это поле инициализируется с помощью LoggerFactory.getLogger(ClassName.class).
Сгенерированный код:
Нюансы:
Аннотация @Slf4j поддерживает различные библиотеки логирования, такие как Log4j, Logback и другие, через SLF4J.
Если вы используете другую библиотеку логирования, Lombok предоставляет аналогичные аннотации:
@Log4j для Log4j.
@Log4j2 для Log4j 2.
@Log для java.util.logging.
#Java #Training #Spring #Lombok #Slf4j
Аннотация @Slf4j
Эта аннотация автоматически создает логгер (SLF4J) для класса. Она избавляет от необходимости вручную создавать поле для логгера.
Пример использования:
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class UserService {
public void createUser(String name) {
log.info("Creating user: {}", name);
}
}
Как это работает:
Lombok генерирует поле log типа Logger, которое можно использовать для логирования. Это поле инициализируется с помощью LoggerFactory.getLogger(ClassName.class).
Сгенерированный код:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class UserService {
private static final Logger log = LoggerFactory.getLogger(UserService.class);
public void createUser(String name) {
log.info("Creating user: {}", name);
}
}
Нюансы:
Аннотация @Slf4j поддерживает различные библиотеки логирования, такие как Log4j, Logback и другие, через SLF4J.
Если вы используете другую библиотеку логирования, Lombok предоставляет аналогичные аннотации:
@Log4j для Log4j.
@Log4j2 для Log4j 2.
@Log для java.util.logging.
#Java #Training #Spring #Lombok #Slf4j
Аннотации для работы с исключениями
Аннотация @SneakyThrows — работа с исключениями
Аннотация @SneakyThrows позволяет "тихо" выбрасывать проверяемые исключения (checked exceptions) без необходимости объявлять их в сигнатуре метода или обрабатывать с помощью try-catch. Это может быть полезно в случаях, когда вы уверены, что исключение не произойдет, или когда вы хотите избежать излишнего boilerplate-кода.
Пример использования:
Как это работает под капотом?
Lombok использует хитрость с байт-кодом, чтобы обойти проверку компилятора на проверяемые исключения. Вот что происходит:
Генерация байт-кода:
Lombok оборачивает метод, помеченный @SneakyThrows, в блок try-catch.
Если возникает проверяемое исключение, оно "пробрасывается" как непроверяемое (unchecked exception).
Пример сгенерированного кода:
Метод Lombok.sneakyThrow:
Lombok добавляет статический метод sneakyThrow, который "обманывает" компилятор, заставляя его думать, что исключение непроверяемое:
Нюансы использования
Опасность скрытых исключений:
Использование @SneakyThrows может скрыть потенциальные ошибки, так как проверяемые исключения больше не видны в сигнатуре метода. Это может привести к трудноуловимым багам.
Несовместимость с некоторыми фреймворками:
Например, Spring AOP (аспектно-ориентированное программирование) может некорректно обрабатывать методы с @SneakyThrows, так как прокси-классы ожидают явного объявления исключений.
Ограничение на типы исключений:
По умолчанию @SneakyThrows обрабатывает все проверяемые исключения. Однако можно указать конкретные типы исключений:
Взаимодействие с другими аннотациями:
@SneakyThrows можно комбинировать с другими аннотациями Lombok, такими как @Getter, @Setter, @Data. Однако будьте осторожны при использовании с аннотациями, которые генерируют методы (например, @Builder), так как это может привести к неожиданному поведению.
#Java #Training #Spring #Lombok #SneakyThrows
Аннотация @SneakyThrows — работа с исключениями
Аннотация @SneakyThrows позволяет "тихо" выбрасывать проверяемые исключения (checked exceptions) без необходимости объявлять их в сигнатуре метода или обрабатывать с помощью try-catch. Это может быть полезно в случаях, когда вы уверены, что исключение не произойдет, или когда вы хотите избежать излишнего boilerplate-кода.
Пример использования:
import lombok.SneakyThrows;
public class FileService {
@SneakyThrows
public void readFile(String path) {
// Код, который может выбросить IOException
Files.readAllBytes(Paths.get(path));
}
}
Как это работает под капотом?
Lombok использует хитрость с байт-кодом, чтобы обойти проверку компилятора на проверяемые исключения. Вот что происходит:
Генерация байт-кода:
Lombok оборачивает метод, помеченный @SneakyThrows, в блок try-catch.
Если возникает проверяемое исключение, оно "пробрасывается" как непроверяемое (unchecked exception).
Пример сгенерированного кода:
public void readFile(String path) {
try {
Files.readAllBytes(Paths.get(path));
} catch (IOException e) {
throw Lombok.sneakyThrow(e); // Преобразование в unchecked исключение
}
}
Метод Lombok.sneakyThrow:
Lombok добавляет статический метод sneakyThrow, который "обманывает" компилятор, заставляя его думать, что исключение непроверяемое:
public static <T extends Throwable> RuntimeException sneakyThrow(Throwable t) throws T {
throw (T) t;
}
Нюансы использования
Опасность скрытых исключений:
Использование @SneakyThrows может скрыть потенциальные ошибки, так как проверяемые исключения больше не видны в сигнатуре метода. Это может привести к трудноуловимым багам.
Несовместимость с некоторыми фреймворками:
Например, Spring AOP (аспектно-ориентированное программирование) может некорректно обрабатывать методы с @SneakyThrows, так как прокси-классы ожидают явного объявления исключений.
Ограничение на типы исключений:
По умолчанию @SneakyThrows обрабатывает все проверяемые исключения. Однако можно указать конкретные типы исключений:
@SneakyThrows(IOException.class)
public void readFile(String path) {
Files.readAllBytes(Paths.get(path));
}
Взаимодействие с другими аннотациями:
@SneakyThrows можно комбинировать с другими аннотациями Lombok, такими как @Getter, @Setter, @Data. Однако будьте осторожны при использовании с аннотациями, которые генерируют методы (например, @Builder), так как это может привести к неожиданному поведению.
#Java #Training #Spring #Lombok #SneakyThrows
Что выведет код?
#Tasks
import java.util.ArrayList;
import java.util.List;
public class Task150125_1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.addFirst(4);
list.clear();
list.remove(2);
System.out.println(list);
}
}
#Tasks
Вопросы с собеседования 👩💻
Что такое 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