Java | Фишки и трюки
Open in Telegram
Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg
Show more6 814
Subscribers
-524 hours
-107 days
-6530 days
Posts Archive
6 811
⚠️ 7.834.500₽ - бесплатно! ⚠️
На сегодняшний день это самый крупный сборник слитых курсов в снг, по таким языкам как:
>Python (564гб курсов, 332гб видео)
>C# (127гб курсов, 82гб видео)
>Java (345гб курсов, 223гб видео)
>PHP (134гб курсов, 217гб видео)
>Go (223гб курсов, 79гб видео)
>Rust (187гб курсов, 149гб видео)
>SQL (341гб курсов, 127гб видео)
>MySQL (221гб курсов, 134гб видео)
>REST (178гб курсов, 94гб видео)
>NoSQL (89гб курсов, 54гб видео
>C++ (163гб курсов, 231гб видео)
>Kotlin (294гб курсов, 128гб видео)
>ИБ (172гб курсов, 98гб видео)
>GoLang (182гб курсов, 283гб видео)
> 1C (291гб курсов, 102гб видео)
>DevOps (92гб курсов, 71гб видео)
>Swift (62гб курсов, 27гб видео)
>Другое (1114гб курсов, 871гб видео)
Не видео на ютуб, а реальный СЛИВ огромных баз. Проверь сам!🚨
6 811
Varargs (Variable Arguments List, изменяющийся список аргументов) — это способ создания методов, которые могут принимать произвольное количество аргументов одного типа (от нуля и более). Данная возможность появилась в JDK 5.
Запись вида
Object... args и есть varargs.
При этом три точки после типа указывают, что метод в качестве аргумента может принимать как массив, так и любую последовательность аргументов, записанных через запятую, которая все равно преобразуется в одномерный массив - «под капотом» компилятор на уровне байт-кода неявно заменяет переданную последовательность массивом. Уже в методе аргумент varargs используется как одномерный массив.
Альтернативой varargs является перегрузка методов или передача в метод массива значений.
Varargs был создан с целью упрощения работы программиста, удобства и краткости кода.
📌 В качестве ограничения любой метод может использовать varargs только в единственном числе и строго последним аргументом.6 811
✅ Тяжело найти хорошую работу Java-разработчика без знания архитектуры Микросервисов?
✅ Хочется охватить все компоненты этой архитектуры и варианты их взаимодействия?
✔️ Перейти на новый уровень синьора, повысить знания по микросервисам, контейнерам и облачным технологиям?
✔️ Уверенно ориентироваться в "живых" проектах и технологиях на стеке Spring Cloud?
ПРЕДЛАГАЕМ ПРОЙТИ ОТКРЫТЫЕ ЗАНЯТИЯ на расширенном курсе по всем основным темам микросервисной архитектуры:
Java Микросервисы, Kafka, Docker, Spring Cloud, Spring WebFlux
🔥В реальном проекте, с выполнением и разбором домашних заданий.
ВЫ ПОЛУЧИТЕ:
➕ Доступ навсегда ко всем материалам занятий и репозиториям микросервисов
➕ Персонализированную поддержку и живое общение в ТГ-группе с темами на каждое занятие
➕ Практику и примеры применения более 30-ти технологий на стеке Spring Cloud
➕ Огромный стек технологий в резюме и группа проектов в портфолио
ИТОГ:
⚡️ Повышенная ценность, как Java-разработчика и новый уровень дохода
⚡️ Полное понимание компонентов микросервисов и их взаимодействия
⚡️ Электронный сертификат об окончании курса
⚡️ Поддержка в специальной группе Telegram, в том числе после завершения обучения
Время прохождения не ограничено, материалы и поддержка даются навсегда.
Первым 500 участникам СКИДКА 50%
ЗАПИСАТЬСЯ ЗДЕСЬ ⬇️⬇️⬇️
https://t.me/JavaOPsBot?start=c-cloud=s-java_tips_and_tricks
6 811
⌨️ Использование
java.util.stream.Collectors для обработки коллекций
Код:
import java.util.List;
import java.util.stream.Collectors;
public class StreamCollectorsExample {
public static void main(String[] args) {
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Примеры использования Collectors
// Преобразование элементов коллекции в строку
String numbersAsString = numbers.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
System.out.println("Числа в виде строки: " + numbersAsString);
// Получение среднего значения всех элементов коллекции
double average = numbers.stream()
.collect(Collectors.averagingInt(Integer::intValue));
System.out.println("Среднее значение: " + average);
// Фильтрация элементов и сборка их в новую коллекцию
List<Integer> evenNumbers = numbers.stream()
.filter(num -> num % 2 == 0)
.collect(Collectors.toList());
System.out.println("Четные числа: " + evenNumbers);
// Группировка элементов по условию
System.out.println("Числа по остатку от деления на 3: " + numbers.stream()
.collect(Collectors.groupingBy(num -> num % 3)));
}
}
⚙️Этот пример демонстрирует использование класса Collectors из пакета java.util.stream для более эффективной обработки коллекций в Java. Методы класса Collectors предоставляют различные операции для сбора (collecting) элементов из потока данных в различные структуры данных или для выполнения агрегатных операций над элементами потока.6 811
Онлайн-магистратура с IT специальностями от Яндекса
Совместно с ИТМО, МИФИ, МФТИ.
Онлайн-магистратура с актуальными программами и гибким графиком обучения.
Получите высокооплачиваемую IT профессию, официальный диплом и практические знания.
Господдержка оплаты. Совмещение с работой!
Узнать больше
#реклама 16+
О рекламодателе
6 811
⌨️ Switch Expressions
В Java 12 появился новый синтаксис для
switch, который позволяет возвращать значение используя стрелки ->, что делает код более компактным и удобным. Теперь switch может использоваться как выражение, а не только как оператор, что упрощает его применение в логике.
Ранее switch использовался как оператор, и код мог выглядеть громоздко:
String day = "MONDAY";
int numLetters;
switch (day) {
case "MONDAY":
case "FRIDAY":
case "SUNDAY":
numLetters = 6;
break;
case "TUESDAY":
numLetters = 7;
break;
default:
numLetters = 8;
}
System.out.println(numLetters); // Вывод: 6
Со Switch Expressions можно переписать этот код более лаконично:
String day = "MONDAY";
int numLetters = switch (day) {
case "MONDAY", "FRIDAY", "SUNDAY" -> 6;
case "TUESDAY" -> 7;
default -> 8;
};
System.out.println(numLetters); // Вывод: 6
Теперь switch может вернуть значение, и нет необходимости в break.
#java #switch6 811
⌨️ Что такое static метод интерфейса?
Статические методы интерфейса похожи на методы по умолчанию, за исключением того, что для них отсутствует возможность переопределения в классах, реализующих интерфейс.
✔️Статические методы в интерфейсе являются частью интерфейса без возможности переопределить их для объектов класса реализации;
✔️Методы класса
java.lang.Object нельзя переопределить как статические;
✔️Статические методы в интерфейсе используются для обеспечения вспомогательных методов, например, проверки на null, сортировки коллекций и т.д.
Вызывать static метод интерфейса можно используя имя интерфейса:
interface Paper {
static void show() {
System.out.println("static show()");
}
}
class Licence {
public void showPaper() {
Paper.show();
}
}6 811
AI-агенты: новая волна автоматизации бизнеса 🔛
Бизнес все активнее внедряет AI-агентов, которые работают быстрее, дешевле и без усталости.
Это не просто чат-боты, а полноценные цифровые сотрудники, которые автоматизируют процессы в HR, финансах, маркетинге и других сферах.
Админ канала ⏩ Ai, работай! ⏪ подготовил обзор российских и зарубежных решений:
где AI-агенты уже зарабатывают деньги, как они трансформируют рынок и какие технологии стоит изучить сегодня, чтобы не остаться позади.
Забирай PDF бесплатно:
https://t.me/+xkf-cAO3EbM4ZjVi
6 811
⌨️ Что такое default методы интрефейса?
Java 8 позволяет добавлять неабстрактные реализации методов в интерфейс, используя ключевое слово
default:
interface Example {
int process(int a);
default void show() {
System.out.println("default show()");
}
}
✔️Если класс реализует интерфейс, он может, но не обязан, реализовать методы по-умолчанию, уже реализованные в интерфейсе. Класс наследует реализацию по умолчанию.
✔️Если некий класс реализует несколько интерфейсов, которые имеют одинаковый метод по умолчанию, то класс должен реализовать метод с совпадающей сигнатурой самостоятельно. Ситуация аналогична, если один интерфейс имеет метод по умолчанию, а в другом этот же метод является абстрактным - никакой реализации по умолчанию классом не наследуется.
✔️Метод по умолчанию не может переопределить метод класса java.lang.Object.
✔️Помогают реализовывать интерфейсы без страха нарушить работу других классов.
✔️Позволяют избежать создания служебных классов, так как все необходимые методы могут быть представлены в самих интерфейсах.
✔️Дают свободу классам выбрать метод, который нужно переопределить.
✔️Одной из основных причин внедрения методов по умолчанию является возможность коллекций в Java 8 использовать лямбда-выражения.
Вызывать default метод интерфейса в реализующем этот интерфейс классе можно используя ключевое слово super вместе с именем интерфейса:
interface Paper {
default void show() {
System.out.println("default show()");
}
}
class Licence implements Paper {
public void show() {
Paper.super.show();
}
}6 811
🔍Тестовое собеседование на Middle Java-разработчика завтра
14 мая(уже сегодня!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика.
Как это будет:
📂 Константин Лесняк, Java-разработчик с большим опытом проведения собесов, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Костя будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Косте
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Java-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot
Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2VtzquWiHfz
6 811
⌨️ Что такое Heap и Stack память в Java? Какая разница между ними?
Heap (куча) используется Java Runtime для выделения памяти под объекты и классы. Создание нового объекта также происходит в куче. Это же является областью работы сборщика мусора. Любой объект, созданный в куче, имеет глобальный доступ и на него могут ссылаться из любой части приложения.
Stack (стек) это область хранения данных также находящееся в общей оперативной памяти (RAM). Всякий раз, когда вызывается метод, в памяти стека создается новый блок, который содержит примитивы и ссылки на другие объекты в методе. Как только метод заканчивает работу, блок также перестает использоваться, тем самым предоставляя доступ для следующего метода. Размер стековой памяти намного меньше объема памяти в куче. Стек в Java работает по схеме LIFO (Последний-зашел-Первый-вышел)
Различия между Heap и Stack памятью:
✔️ Куча используется всеми частями приложения, в то время как стек используется только одним потоком исполнения программы.
✔️ Всякий раз, когда создается объект, он всегда хранится в куче, а в памяти стека содержится лишь ссылка на него. Память стека содержит только локальные переменные примитивных типов и ссылки на объекты в куче.
✔️ Объекты в куче доступны с любой точки программы, в то время как стековая память не может быть доступна для других потоков.
✔️ Стековая память существует лишь какое-то время работы программы, а память в куче живет с самого начала до конца работы программы.
✔️ Если память стека полностью занята, то Java Runtime бросает исключение java.lang.StackOverflowError. Если заполнена память кучи, то бросается исключение java.lang.OutOfMemoryError: Java Heap Space.
✔️ Размер памяти стека намного меньше памяти в куче.
✔️ Из-за простоты распределения памяти, стековая память работает намного быстрее кучи.
Для определения начального и максимального размера памяти в куче используются -Xms и -Xmx опции JVM. Для стека определить размер памяти можно с помощью опции -Xss.
#java #heap #stack #memory
6 811
Сегодня QA.GURU анонсировали закрытый вебинар «Как Python открывает новые горизонты в карьере тестировщика».
Обещают последние тренды QA, блок с лайфкодингом и живую сессию вопросов.
▶ По этой ссылке можно зарегистрироваться для бесплатного участия в этот четверг в 8 вечера мск.
В программе:
— Зачем ручным тестировщикам разбираться в автоматизации и почему Python — оптимальный старт;
— Какие навыки выводят QA в топ в 2025 году (спойлер: нейросети пока не конкуренты);
— Практика: пишем ручной тест, автоматизируем на Python, сравниваем Playwright, Selenium и Selene, запускаем с Pytest и без.
Спикер, Станислав Васенков — QA, за плечами которого больше 10 лет автоматизации, ex-Head of QAA pflb.ru и автор библиотеки allure-notifications. Победитель хакатона по автоматизации тестирования от EPAM. Организатор конференций, спикер Heisenbug, основатель QA.GURU и AUTOTESTS.AI. Стас знает, о чём говорит — и умеет научить.
🔗 Забирайте ссылку. Кто успеет — тот в игре.
6 811
⌨️ Методы compose и andThen интерфейса Function
Function<T,R> — функциональный интерфейс, который умеет принимать объект типа T и возвращать R. У него есть два метода-комбинатора:
default <V> Function<V,R> compose(Function<? super V,? extends T> before)
default <V> Function<T,V> andThen(Function<? super R,? extends V> after)
🔵f.compose(g) → сначала выполняет g, потом результат передаёт в f.
🔵f.andThen(h) → сначала выполняет f, потом h.
✔️ Пример:
import java.util.function.Function;
public class ComposeAndThenDemo {
public static void main(String[] args) {
Function<String, Integer> parse = Integer::parseInt;
Function<Integer, Double> half = i -> i / 2.0;
Function<Double, String> toStr = d -> "Result: " + d;
// Составляем: сначала parse, затем half, затем toStr
Function<String, String> pipeline =
toStr
.compose(half) // toStr(half(x))
.compose(parse); // toStr(half(parse(x)))
// То же самое через andThen:
Function<String, String> pipeline2 =
parse
.andThen(half) // half(parse(x))
.andThen(toStr); // toStr(half(parse(x)))
System.out.println(pipeline.apply("42")); // Result: 21.0
System.out.println(pipeline2.apply("42")); // Result: 21.0
}
}
▸ compose строит цепочку справа-налево (parse → half → toStr).
▸ andThen — слева-направо (parse → half → toStr).6 811
Всем привет! Меня Влад зовут и я разработчик уже целых 8 лет. Последние 2 года работал в компании Uber в Амстердаме, а начинал, кстати, с полного нуля — обычным парнем из деревни.
Если ты мечтаешь попасть в IT, круто зарабатывать и гордиться собой, но не веришь, что это вообще реально — я прекрасно тебя понимаю.
Ты читаешь телеграм-каналы, смотришь ролики на YouTube, и все равно в голове бардак: слишком много всего, а что реально важно — не понятно. Кажется, без специального образования никуда, а страх бросить все на полпути только усиливается.
Поверь, это абсолютно нормально. Я прошел ровно через то же самое и знаю, как помочь тебе не потеряться в море информации и сомнений.
У меня есть решение — четкий и понятный план, как с нуля построить карьеру разработчика и не бросить на полпути, отказавшись от мечты.
Расскажу, с чего начать, как не сдаться и как стать разработчиком, даже если этот путь кажется сложным и нереальным.
Приходи на бесплатный вебинар — “Как начать зарабатывать 200 000₽ в IT за 6 месяцев: путь от нуля до первой работы”.
ЗАПИСАТЬСЯ НА ВЕБИНАР
6 811
⌨️ Описание и назначение разных циклов
Цикл for со счетчиком
for (initialization; condition; update) {
// тело цикла
}
Описание:
initialization: выполняется один раз перед началом цикла. Обычно используется для инициализации счетчика.
condition: проверяется перед каждой итерацией. Если условие истинно, выполняется тело цикла.
update: выполняется после каждой итерации. Обычно используется для изменения счетчика.
int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) {
System.out.println(i + ": " + numbers[i]);
}
Применение:
Используется, когда известно количество итераций заранее. Часто применяется для работы с массивами или коллекциями, когда нужен индекс.
Цикл for-each
for (type element : collection) {
// тело цикла
}
Описание:
Итерируется по каждому элементу коллекции (например, массива, списка, множества). Обеспечивает удобный способ доступа к каждому элементу без использования индексов.
int[] numbers = {1, 2, 3, 4, 5};
for (int number : numbers) {
System.out.println(number);
}
Применение:
Предпочтителен, когда не нужен доступ к индексам элементов.
Цикл while
while (condition) {
// тело цикла
}
Описание:
condition: проверяется перед каждой итерацией. Если условие истинно, выполняется тело цикла.
String code = UUID.randomUUID().toString();
boolean isCodeExists = repo.isCodeExists(code);
while (isCodeExists) {
code = UUID.randomUUID().toString();
isCodeExists = repo.isCodeExists(code);
}
repo.saveCode(code);
Применение:
Используется, когда количество итераций неизвестно заранее и определяется во время выполнения программы. Цикл может не выполниться ни одного раза.
Цикл do-while
do {
// тело цикла
} while (condition);
Описание:
Выполняет тело цикла хотя бы один раз, а затем проверяет условие condition. Если условие истинно, цикл повторяется.
String command;
do {
command = readCommand();
doCommand(command);
} while (!"EXIT".equals(command));
Применение:
Используется, когда тело цикла должно выполниться хотя бы один раз, независимо от условия. Часто применяется для меню или ввода данных, где сначала нужно выполнить действие, а затем проверить условие.
#java #cycles #for #while6 811
Ещё один канал про код?
❌ НЕТ: “Что такое ООП”
❌ НЕТ: “Топ-5 вопросов на собесе”
❌ НЕТ: “Почему монолит — это плохо”
✅ ДА: «Как продать бизнесу рефакторинг»
✅ ДА: «Как не утонуть в легаси»
✅ ДА: «Как проектировать, а не тушить»
Короче, канал для тех, кто уже умеет писать код и теперь пытается выжить в реальных проектах.
erid: 2W5zFJa3bn8
6 811
☕️Работа с сохранением и загрузкой прогресса игрока в Java: сериализация данных
😎Задача:
🟢Сохранить состояние игрового объекта (например, класс Player) в файл. 🟢Загрузить данные из файла при старте игры. 🟢Обеспечить корректную работу даже при изменениях в структуре класса. 🟢Обработать возможные ошибки ввода-вывода.😎Способы решения 🔢Стандартная сериализация Java (Serializable)
🟢Класс реализует интерфейс Serializable, и с помощью ObjectOutputStream и ObjectInputStream объекты записываются и читаются из файла.🔢Использование JSON или XML
🟢Сериализация в человекочитаемый формат с помощью библиотек, например, Gson, Jackson (для JSON) или JAXB (для XML). Это удобно для отладки и совместимости.🔢Кастомная сериализация
🟢Реализация собственных методов записи и чтения данных, например, через DataOutputStream/DataInputStream, что даёт больше контроля над форматом и размером файла.😎Пример реализации на Java с использованием стандартной сериализации
import java.io.*;
class Player implements Serializable {
private static final long serialVersionUID = 1L;
String name;
int level;
int score;
public Player(String name, int level, int score) {
this.name = name;
this.level = level;
this.score = score;
}
@Override
public String toString() {
return "Player{name='" + name + "', level=" + level + ", score=" + score + '}';
}
}
public class SaveLoadGame {
public static void savePlayer(Player player, String filename) {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
oos.writeObject(player);
System.out.println("Прогресс сохранён.");
} catch (IOException e) {
System.err.println("Ошибка при сохранении: " + e.getMessage());
}
}
public static Player loadPlayer(String filename) {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
return (Player) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
System.err.println("Ошибка при загрузке: " + e.getMessage());
return null;
}
}
public static void main(String[] args) {
Player player = new Player("Игрок1", 5, 1500);
String saveFile = "player.dat";
savePlayer(player, saveFile);
Player loadedPlayer = loadPlayer(saveFile);
if (loadedPlayer != null) {
System.out.println("Загруженный игрок: " + loadedPlayer);
}
}
}6 811
☕️Интеграция звуковых эффектов и музыки в игру на Java
😎Задача:
🟢При разработке игр на Java требуется работать со звуком и музыкой. 🟢Нужно подключить звуковые звуки (эффекты и музыку) к игровому проекту. 🟢Реализовать звуковой сигнал в нужные моменты (например, выстрел, прыжок, победа). 🟢Обеспечить громкость и возможность паузы/продолжения музыки. 🟢Оптимизировать загрузку и меры для минимизации задержек и нагрузки на систему.😎Способы решения 🔢Использование стандартного Java Sound API 🔢Библиотека
🟢javax.sound.sampled позволяет работать с аудиофайлами формата WAV, AIFF и др.🔢Использование различных библиотек
🟢Например, LWJGL OpenAL , TinySound , JOAL — более мощные и гибкие решения для работы со звуком в играх, 3D-звуке, резервных источниках и других возможностях.🔢Интеграция с игровыми движками
🟢Если используются игровые движки (например, LibGDX), он обычно предоставляет собственный удобный API для работы со звуком.😎Пример на Java с использованием стандартного Java Sound API
import javax.sound.sampled.*;
import java.io.File;
import java.io.IOException;
public class SoundPlayer {
private Clip clip;
// Загрузка и подготовка звукового файла
public void loadSound(String filepath) {
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(filepath));
clip = AudioSystem.getClip();
clip.open(audioInputStream);
} catch (UnsupportedAudioFileException | IOException | LineUnavailableException e) {
System.err.println("Ошибка загрузки звука: " + e.getMessage());
}
}
// Воспроизведение звука
public void play() {
if (clip == null) return;
if (clip.isRunning()) clip.stop();
clip.setFramePosition(0);
clip.start();
}
// Остановка звука
public void stop() {
if (clip != null && clip.isRunning()) {
clip.stop();
}
}
// Регулировка громкости (от 0.0 до 1.0)
public void setVolume(float volume) {
if (clip == null) return;
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
float dB = (float)(Math.log10(volume) * 20);
gainControl.setValue(dB);
}
public static void main(String[] args) {
SoundPlayer sound = new SoundPlayer();
sound.loadSound("jump.wav"); // Замените на путь к вашему звуковому файлу
sound.setVolume(0.5f);
sound.play();
// Для демонстрации задержка перед завершением программы
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
sound.stop();
}
}6 811
⌨️ Ссылки на методы — это способ упрощенного вызова методов или конструктора, который позволяет передавать их как аргументы в методы или сохранять в переменных. Ссылки на методы появились в Java 8 и являются частью улучшенной поддержки функционального программирования в языке.
Есть несколько видов ссылок на методы:
1️⃣ Ссылка на статический метод
Используется для вызова статических методов класса.
Синтаксис:
ContainingClass::staticMethodName
Пример:
import java.util.function.Function;
public class MethodReferenceExample {
public static void main(String[] args) {
Function<String, Integer> converter = Integer::parseInt;
Integer number = converter.apply("123");
System.out.println(number); // 123
}
}
2️⃣ Ссылка на метод экземпляра конкретного объекта
Используется для вызова методов экземпляра объекта.
Синтаксис:
containingObject::instanceMethodName
Пример:
import java.util.Arrays;
import java.util.List;
public class MethodReferenceExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println);
}
}
3️⃣ Ссылка на метод экземпляра произвольного объекта определенного типа
Синтаксис:
ContainingType::methodName
Пример:
import java.util.function.Function;
public class FunctionExample {
public static void main(String[] args) {
Function<String, Integer> stringLength = String::length;
Integer length = stringLength.apply("Hello, World!");
System.out.println(length); // 13
}
}
Отличие от предыдущего вида в том, что в предыдущем ссылка на метод получается у конкретного объекта, стало быть вызовется метод этого объекта, а в нашем случае при получении ссылки на метод, мы знаем только метод, но объект у которого вызовется этот метод еще не известен, он будет предоставлен при вызове метода. Код выше будет означать "Hello, World!".length()
4️⃣ Ссылка на конструктор
Используется для вызова конструктора.
Синтаксис:
ClassName::new
Пример:
import java.util.function.Supplier;
public class MethodReferenceExample {
public static void main(String[] args) {
Supplier<MethodReferenceExample> exampleSupplier = MethodReferenceExample::new;
MethodReferenceExample example = exampleSupplier.get();
System.out.println(example); // MethodReferenceExample@<hashcode>
}
}
#java #MethodReference6 811
⚠️ 7.834.500₽ - бесплатно! ⚠️
На сегодняшний день это самый крупный сборник слитых курсов в снг, по таким языкам как:
>Python (564гб курсов, 332гб видео)
>C# (127гб курсов, 82гб видео)
>Java (345гб курсов, 223гб видео)
>PHP (134гб курсов, 217гб видео)
>Go (223гб курсов, 79гб видео)
>Rust (187гб курсов, 149гб видео)
>SQL (341гб курсов, 127гб видео)
>MySQL (221гб курсов, 134гб видео)
>REST (178гб курсов, 94гб видео)
>NoSQL (89гб курсов, 54гб видео
>C++ (163гб курсов, 231гб видео)
>Kotlin (294гб курсов, 128гб видео)
>ИБ (172гб курсов, 98гб видео)
>GoLang (182гб курсов, 283гб видео)
> 1C (291гб курсов, 102гб видео)
>DevOps (92гб курсов, 71гб видео)
>Swift (62гб курсов, 27гб видео)
>Другое (1114гб курсов, 871гб видео)
Не видео на ютуб, а реальный СЛИВ огромных баз. Проверь сам!🚨
