Java | Фишки и трюки
前往频道在 Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
显示更多6 813
订阅者
无数据24 小时
-137 天
-6630 天
帖子存档
6 813
🌱 Spring SpEL (Spring Expression Language) — это мощный язык выражений, предоставляемый фреймворком Spring. Он используется для динамической обработки данных, управления конфигурацией и вычисления значений в runtime. SpEL позволяет обращаться к свойствам объектов, вызывать методы, работать с коллекциями, выполнять арифметические и логические операции, а также взаимодействовать с бинами Spring.
Основные возможности SpEL:
✔️ Обращение к свойствам:
person.name
✔️Вызов методов: person.getName()
✔️ Работа с коллекциями: фильтрация и проекция (list.?[property > 10]).
✔️ Логические и арифметические операции: age > 18 && hasLicense
✔️ Доступ к бинам Spring: @beanName.method()
Простой пример:
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
public class SpELExample {
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
// Пример вычисления простого выражения
String expression = "'Hello, Spring SpEL!'.toUpperCase()";
String result = parser.parseExpression(expression).getValue(String.class);
System.out.println(result); // Вывод: HELLO, SPRING SPEL!
}
}
Использование в аннотациях:
@Component
public class MyBean {
@Value("#{T(java.lang.Math).random() * 100}")
private double randomValue;
@Value("#{systemProperties['user.name']}")
private String userName;
public void printValues() {
System.out.println("Random Value: " + randomValue);
System.out.println("User Name: " + userName);
}
}
✔️ T(java.lang.Math).random() — вызов статического метода Math.random().
✔️ systemProperties['user.name'] — доступ к системным свойствам.
Использование с коллекциями:
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import java.util.Arrays;
import java.util.List;
public class CollectionExample {
public static void main(String[] args) {
ExpressionParser parser = new SpelExpressionParser();
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// Фильтрация списка
List<Integer> filteredNumbers = (List<Integer>) parser.parseExpression(
"#numbers.?[#this > 2]").getValue(new StandardEvaluationContext(), numbers);
System.out.println(filteredNumbers); // Вывод: [3, 4, 5]
}
}
SpEL является удобным инструментом для внедрения динамического поведения и вычислений в приложениях Spring.6 813
Turrit - на основе Telegram
(для iOS и Android)
Turrit является бесплатным сторонним клиентом, разработанным на основе Telegram API. В нем:
🔅 AI-переводчики
🚀 ускорение загрузки в 20 раз
💭 неограниченное облачное хранилище
🌏 онлайн-просмотр видео TikTok
💫 элегантный и простой интерфейс
⛓ защита безопасности и конфиденциальности
В настоящее время у Turrit уже более 100 000 ежедневных активных пользователей. В России он также пользуется признанием, вот в форуме 4PDA идет горячее обсуждение.
Скачать можно в Google Play и App Store.
Присоединяйтесь к официальной группе Turrit!
6 813
public class Quest {
public static final Quest INSTANCE = new Quest();
private final int yearsAgo;
private static final int CURRENT_YEAR = Calendar.getInstance().get(Calendar.YEAR);
private Quest() {
yearsAgo = CURRENT_YEAR - 2000;
}
public int yearsAgo() {
return yearsAgo;
}
public static void main(String[] args) {
System.out.println(INSTANCE.yearsAgo());
}
}6 813
Блиц-тестирование на грейд в Java
Менторы ШОРТКАТ собрали полезный небольшой тест, который поможет тебе проверить знания.
Конечно, это не определит грейд точно, но даст понять, какие темы западают. За прохождение ещё и дадут скидку на менторство.
Переходи в бот, чтобы пройти тест: @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzqxDv1BP
6 813
⌨️ Простой пример использования Project Reactor, который демонстрирует основы работы с Mono и Flux.
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
public class ProjectReactorExample {
public static void main(String[] args) {
// Пример с Mono
Mono<String> monoExample = Mono.just("Hello, Reactor!");
monoExample
.map(String::toUpperCase) // Преобразуем строку в верхний регистр
.subscribe(System.out::println); // Подписываемся и выводим результат
// Пример с Flux
Flux<Integer> fluxExample = Flux.just(1, 2, 3, 4, 5);
fluxExample
.filter(num -> num % 2 == 0) // Фильтруем четные числа
.map(num -> num * num) // Возводим в квадрат
.subscribe(System.out::println); // Подписываемся и выводим результат
}
}
🔍 Что происходит в коде?
1. Mono:
- Создаем экземпляр Mono с помощью Mono.just(), передавая строку.
- Используем метод map(), чтобы преобразовать строку в верхний регистр.
- Подписываемся на Mono с помощью subscribe, который выводит результат.
2. Flux:
- Создаем экземпляр Flux с числовыми значениями от 1 до 5.
- Фильтруем четные числа с помощью filter().
- Применяем map(), чтобы возвести каждое четное число в квадрат.
- Подписываемся на Flux и выводим результат.6 813
2024 все.. а ты еще не разработчик?
нет опыта, не хватает идей и времени, высокая конкуренция. Оставь эти отговорки в 2024! И читай здесь, что нужно для успешной карьеры 👇
- актуальные навыки в 2025. Чем быстрее адаптируешься к запросам рынка, тем выше твоя зп 😉
- идеи для проектов, современные инструменты разработки (Jira, GitHub, Miro)
- успешное прохождение интервью
Не понимаешь, как это реализовать? Тогда приходи на мощный 3-х дневный интенсив «Пошаговый гайд к работе Java Dev в 2025» от FAANG SCHOOL. И у тебя полностью перевернется представление о том, как действительно выглядит рынок IT!
- какие навыки изучить в первую очередь
- как выбирать актуальные идеи для проекта
- ошибки, из-за которых 80% проектов оказываются провальными
- как преодолеть фильтры HR без накрутки опыта
⬇️ Пока ты думаешь, кто-то получает твой оффер! Переходи, забирай подарок и узнай, как даже джуну создать проект, способный обеспечить пассивный доход!
6 813
🚀 Реактивное программирование с помощью Project Reactor
Реактивное программирование — это новый подход к созданию асинхронных и масштабируемых приложений. Project Reactor — библиотека для Java, которая делает этот процесс простым и эффективным.
🔍 Что такое Project Reactor?
Project Reactor предоставляет инструменты для работы с потоками данных, основанные на спецификации Reactive Streams. Это дает возможность обрабатывать асинхронные события, используя:
1. Mono: асинхронный поток, который возвращает 0 или 1 элемент. Идеален для единичных значений.
2. Flux: поток, который может вернуть 0, 1 или много элементов. Отлично подходит для работы с коллекциями данных.
⚡ Преимущества Project Reactor:
🏎️ Высокая производительность: Неблокирующая модель усиливает эффективность использования ресурсов.
🛠️ Простой в обработке ошибок: Реактивные методы делают управление ошибками интуитивным.
📜 Читабельный код: Операторы позволяют писать более чистый и понятный код.
6 813
Подробно рассказываем о высокопроизводительных решениях с фреймворком userver на новом бесплатном вебинаре!
Он предназначен для создания надежных и молниеносных микросервисов и веб-серверов. Освойте передовой C++ фреймворк всего за 90 минут!
✅ Вы узнаете:
- Уникальные архитектурные особенности и преимущества userver, которые сделают вашу работу легче и эффективнее.
- Как быстро настроить окружение и запустить свой первый проект, не тратя лишнего времени.
- Советы высококлассных профессионалов по работе с асинхронностью, которые помогут вам стать мастером своего дела и очень много другой полезной сочной информации!
📌Получите практический и ценный опыт работы с userver, который можно сразу применить в своих проектах - регистрируйтесь по ссылке: https://clck.ru/3F9DAQ?erid=LjN8K92wW
P.S. Все зарегистрированные участники получат приличную скидку на обновленный топовый курс «C++ Developer. Professional»
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 813
⌨️ Метод Stream.distinct()
Если у вас есть поток, который может содержать повторяющиеся элементы, используйте операцию
distinct(), чтобы удалить их.
var list = Arrays.asList(1, 2, 3, 3, 4, 5, 5);
var distinctList = list.stream()
.distinct()
.collect(Collectors.toList());
// distinctList: [1, 2, 3, 4, 5]6 813
🌟 Функциональное программирование с Vavr: Пример использования
Сегодня мы рассмотрим, как библиотека Vavr может упростить обработку ошибок и повысить читаемость вашего кода.
Пример использования
Vavr: Обработка ошибок с помощью Try
Представьте, что у вас есть метод, который выполняет операцию деления, и вам нужно обработать возможные ошибки, например деление на ноль. Вместо стандартного подхода с try-catch, мы можем использовать класс Try из Vavr, который автоматически обрабатывает исключения.
Вот как это можно сделать:
import io.vavr.control.Try;
public class VavrExample {
public static void main(String[] args) {
// Попробуем выполнить деление
Try<Double> result = Try.of(() -> divide(10, 0)); // Делим на ноль
// Обработка результата
result.onSuccess(value -> System.out.println("Результат: " + value)) // Если успешно
.onFailure(ex -> System.out.println("Ошибка: " + ex.getMessage())); // Если произошла ошибка
}
// Метод деления
private static double divide(int a, int b) {
return a / b; // Здесь может произойти исключение
}
}
Как это работает?
1. Try.of(): Мы оборачиваем вызов метода деления в Try. Если операция пройдет успешно, метод вернет значение. Если произойдет исключение (например, деление на ноль), это исключение будет перехвачено и "записано" в объект Try.
2. onSuccess(): Этот метод вызывается, если операция прошла успешно. В нашем случае, он выводит результат деления в консоль.
3. onFailure(): Этот метод вызывается, если произошла ошибка. Он позволяет легко обработать исключение, например, выведя сообщение об ошибке.
#Java #ФункциональноеПрограммирование #Vavr6 813
🚀 Усовершенствования в области параллелизма:
Project Loom
Project Loom — это инициатива в Java, которая вводит легковесные потоки (или корутины), делая асинхронное программирование более простым и понятным. Он позволяет разработчикам создавать и управлять огромным количеством потоков с минимальными затратами на ресурсы.
Почему это важно?
С использованием Project Loom вы сможете писать асинхронный код в синхронном стиле, что улучшает читаемость и упрощает отладку. Это значит меньше вложенных колбеков и легче управляемый код.
Как это работает?
Потоки в Project Loom называются "виртуальными", и вы можете создавать их так же просто, как обычные:
public class LoomExample {
public static void main(String[] args) {
// Создаем виртуальный поток
Thread.startVirtualThread(() -> {
System.out.println("Hello from a virtual thread!");
});
// Основной поток продолжает работу
System.out.println("Hello from the main thread!");
}
}
В этом примере мы создаем виртуальный поток, который выводит сообщение в консоль. Основной поток продолжает выполнять свою работу параллельно, что показывает, как просто можно организовать параллелизм без сложных конструкций.
Project Loom облегчает жизнь разработчикам, позволяя создавать многопоточные приложения проще и удобнее.6 813
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки.
Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях.
Программа курса:
▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git
▪️Проект
▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований)
▪️Прохождение реальных собеседований
Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro
Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS
6 813
public class Quest {
public static void main(String[] args) {
System.out.println(4_32l + 4_32l);
}
}6 813
⌨️ Пример реализации Dependency Injection с использованием Reflection
Продолжаем тему метапрограммирования и поговорим о том, как реализовать паттерн проектирования Dependency Injection (DI) с использованием рефлексии. DI позволяет нам разделить зависимости и упростить управление ими, что делает код более чистым и тестируемым.
Пример: Простой контейнер для Dependency Injection
В этом примере мы создадим простой контейнер, который будет автоматически связывать зависимости на основе аннотаций. Для этого нам понадобятся:
1. Аннотация @Inject для пометки полей, которые мы хотим внедрить.
2. Контейнер для обработки аннотаций и создания объектов.
Шаг 1: Создаем аннотацию
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@interface Inject {}
Шаг 2: Создаем классы с зависимостями
class Service {
public void serve() {
System.out.println("Service is working!");
}
}
class Client {
@Inject
private Service service;
public void doSomething() {
service.serve();
}
}
Шаг 3: Реализуем контейнер для Dependency Injection
import java.lang.reflect.Field;
class DIContainer {
public static void inject(Object obj) {
Class<?> clazz = obj.getClass();
for (Field field : clazz.getDeclaredFields()) {
if (field.isAnnotationPresent(Inject.class)) {
try {
field.setAccessible(true); // Делаем поле доступным
Object dependency = field.getType().getDeclaredConstructor().newInstance(); // Создаем экземпляр зависимости
field.set(obj, dependency); // Внедряем зависимость
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
Шаг 4: Используем наш контейнер
public class Main {
public static void main(String[] args) {
Client client = new Client();
DIContainer.inject(client); // Внедряем зависимости
client.doSomething(); // Вывод: Service is working!
}
}
Как это работает?
1️⃣ Мы создаем аннотацию @Inject, чтобы пометить поля, которые должны быть внедрены.
2️⃣ В классе Client поле service помечено этой аннотацией.
3️⃣ Контейнер DIContainer проходит по полям класса, ищет аннотацию @Inject, и, если находит, создает объект зависимости и устанавливает его в поле.
4️⃣ Когда мы вызываем метод doSomething, объект Service успешно внедрен, и мы можем использовать его методы.
#Java #Метапрограммирование #DependencyInjection6 813
+4
Новогодний список: ёлка, мандарины и карьерный рост! 🎇
Новый год — шанс стать лучшей версией себя. Как раз для этого и создан бесплатный онлайн-интенсив в Открытых школах Т1 для Java-разработчиков с опытом от года.
За месяц ты сможешь поднять свои скилы на новый уровень и познакомиться с ИТ-холдингом Т1, а после — принять участие в offer weeks.
📆 Быстрое обучение: 1 месяц.
💻 Гибкий формат: все этапы проходят онлайн, занятия — по вечерам.
Почему в Т1 классно?
🔹Уникальный рыночный опыт и масштабные ИТ-проекты для ключевых отраслей экономики. Разработки Т1 ежегодно получают награды на ИТ-конкурсах: Global CIO, Национальной банковской премии и других.
🔹Быстрый рост в ИТ при экспертной поддержке. Карьерные треки для выпускников Открытых школ позволяют быстро расти в профессии.
🔹Бигтех-культура и айтишные бонусы: ИТ-аккредитация, современный техстек, ДМС, удаленка, крутые офисы, спорт, обучение, ИТ-конференции, программы признания и развития и многое другое от Т1.
Подай заявку на интенсив до 14.01, и пусть 2025 принесёт тебе не только подарки, но и карьерный рост!
Реклама. ООО «Т1» ИНН: 7720484492. Erid: 2SDnjdhR9hM
6 813
⌨️Метапрограммирование: Использование Reflection для динамического изменения кода
Reflection — это механизм в Java, который позволяет программам анализировать и манипулировать объектами во время выполнения. С помощью рефлексии вы можете:
✔️ Получать информацию о классах, методах и полях. Это позволяет динамически исследовать структуры данных вашего приложения.
✔️ Создавать экземпляры классов: Вы можете создавать объекты, не зная их тип на этапе компиляции.
✔️ Вызывать методы динамически: Это дает возможность запускать методы объектов, основываясь на их именах, переданных в виде строк.
✔️ Изменять значения полей: Вы можете динамически изменять значения полей объектов, что может быть особенно полезно в контексте тестирования или сериализации.
Преимущества использования рефлексии:
✔️ Потенциал для создания более абстрактного кода: Вы можете реализовать паттерны проектирования, такие как Dependency Injection.
✔️ Упрощение работы с библиотеками и фреймворками: Многие популярные библиотеки, такие как Spring и Hibernate, активно используют рефлексию для создания и управления объектами.
В следующем посте мы рассмотрим конкретные примеры использования рефлексии на практике. Оставайтесь с нами! 🚀
#Java #Метапрограммирование #Reflection
6 813
Онлайн-курс «Java-разработчик» от EdMe: 6-8 месяцев, гарантия получения работы, оплата после трудоустройства
Образовательный проект EdMe открывает набор на курс по Java-разработке. Программа подойдет для начинающих и тех, кто стремится улучшить свои навыки.
Обучение построено на менторстве и направлено на комплексную подготовку к трудоустройству. За 6-8 месяцев вы сможете достичь уровня middle, для этого нужно уделять обучению от 20 часов в неделю.
Вы будете взаимодействовать с опытным разработчиком, который объяснит, что нужно учить и как это делать, а также чего избегать, чтобы быстрее освоить необходимые навыки и получить оффер. Ментор будет направлять вас, советовать, как решать технические вопросы, и помогать готовиться к собеседованиям.
Плюсы курса:
➕Гарантированное трудоустройство с зарплатой от 140 000 рублей.
➕Оплата после выхода на работу: вы платите только 20% от зарплаты в течение 18 месяцев.
➕Карьерная поддержка даже после окончания курса.
➕Если по каким-то причинам вы не сможете завершить обучение, это можно сделать без оплаты.
Во время обучения вы будете использовать Jira, Confluence, Bitbucket, GitLab – те самые системы, которые станут вашими рабочими инструментами в IT-компаниях.
Программа курса:
▪️Основы Java: Java Core, List, JDBC, Hibernate, Spring (Core, MVC, Security), Spring Boot, Git
▪️Проект
▪️Подготовка к собеседованиям (составление резюме, прохождение тестовых собеседований)
▪️Прохождение реальных собеседований
Узнать подробности и записаться на курс «Java-разработчик» можно на EdMe.pro
Отбор включает тестовое задание, которое под силу выполнить человеку без опыта, и собеседование.
Реклама. ООО "БАКСЭТ", ИНН 4345115602. Erid 2VtzqwacuhS
