Java Portal | Программирование
13.1K subscribers
1K photos
73 videos
32 files
808 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Аннотации в конструкторах Java . декларации и типы

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

@Inject
MyService(FooProcessor processor, BarLogger logger) {
this.processor = processor;
this.logger = logger;
}


В этом примере MyService — это конструктор некоего сервиса, и он помечен аннотацией @Inject. Эта аннотация сообщает DI-библиотеке, что нужно использовать именно этот конструктор для создания экземпляра сервиса.

🔸Аннотации деклараций и конструкторы

В этом посте нас не интересуют сами DI-библиотеки — важно лишь то, что аннотацию @Inject можно ставить на уровне декларации конструктора.

Если взглянуть на определение аннотации @Inject, то оно будет примерно таким:

@Target({METHOD, CONSTRUCTOR, FIELD})
@Retention(RUNTIME)
public @interface Inject {}


Здесь в @Target указано CONSTRUCTOR, что означает, что аннотацию можно применять к конструкторам. Так как @Inject применяется к декларациям, её называют аннотацией декларации

🔸Аннотации типов и конструкторы

До недавнего времени я даже не знал, что конструкторы в Java можно аннотировать также и аннотациями типов. Я много раз просматривал конструкторы, но всё равно упускал, что тип конструктора тоже может быть аннотирован.

Пример — создадим следующую аннотацию:

@Target(ElementType.TYPE_USE)
@Retention(RetentionPolicy.RUNTIME)
@interface T {}


Это аннотация @T, которая применяется только к типам (TYPE_USE). Также указана политика RUNTIME, чтобы можно было получить доступ к аннотации во время выполнения.

Теперь применим её к конструктору:

static class Subject {
public @T Subject() {}
}


Код компилируется без ошибок. Обрати внимание: класс Subjectвложенный (static class), не inner, поэтому используется модификатор static.

🔸Извлечение аннотации во время выполнения

Для полноты картины — пример, как извлечь аннотацию типа с конструктора во время выполнения:

void main() throws NoSuchMethodException {
final Class<?> type = Subject.class;

final Constructor<?> constructor = type.getDeclaredConstructor();

final AnnotatedType annotatedType = constructor.getAnnotatedReturnType();

final Annotation[] typeAnnotations = annotatedType.getDeclaredAnnotations();

print("Type annotations are:", typeAnnotations);
}

private void print(String msg, Annotation[] annotations) {
System.out.println(msg);
for (Annotation annotation : annotations) {
System.out.println(annotation);
}
}


Пошагово:

1. Получаем объект Constructor для конструктора класса Subject
2. Через getAnnotatedReturnType() получаем AnnotatedType, представляющий тип возвращаемого значения конструктора
3. Из AnnotatedType извлекаем все аннотации типа
4. Печатаем аннотации

Пример вывода:

Type annotations are:
@TypeAnnotations2.T()


То есть конструктор действительно аннотирован аннотацией типа @T.

В языке программирования Java тело конструктора не должно содержать операторов return с возвращаемым значением. Однако, подобно методу, возвращающему, скажем, объект Foo, конструктор тоже возвращает значение. Результатом вызова конструктора (если он завершается без исключений) является новый экземпляр объекта, тип которого — это тип класса, в котором объявлен данный конструктор.

Таким образом, в объявлении конструктора присутствует использование типа — типа создаваемого объекта. А в Java можно аннотировать любое использование типа. Такие аннотации называются аннотациями типа

Исходный код, использованный в этом посте, можно найти в этом [Gist]

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2🤔1
Если вам трудно дается java, это проблема навыков.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24😁102
GIT Шпаргалка

🔸Настройка репозитория

git init                         # Инициализировать репозиторий
git clone <url> # Клонировать репозиторий
git config --global user.name "Name" # Установить имя пользователя
git config --global user.email "email" # Установить email


🔸Базовые команды

git status                      # Проверить статус
git add <file> # Проиндексировать файл
git add . # Проиндексировать все файлы
git commit -m "msg" # Зафиксировать изменения
git commit -am "msg" # Индексация + фиксация
git log # История коммитов
git diff # Показать изменения


🔸Работа с ветками

git branch                     # Показать список веток
git branch -a # Показать все ветки (вкл. удалённые)
git branch <name> # Создать ветку
git checkout <branch> # Переключиться на ветку
git checkout -b <name> # Создать и переключиться на ветку
git merge <branch> # Слить ветку
git branch -d <name> # Удалить ветку


🔸Удалённые репозитории

git remote                     # Показать список удалённых
git remote -v # Показать URL-адреса удалённых
git push <remote> <branch> # Отправить изменения
git pull <remote> <branch> # Получить изменения
git fetch # Забрать изменения без слияния


🔸Отмена изменений

git reset <file>              # Убрать файл из индекса
git reset --hard # Откат к последнему коммиту
git checkout <file> # Отменить изменения в файле
git revert <commit> # Откатить коммит (реверт)


🔸Продвинутые команды

git stash                     # Сохранить изменения во временное хранилище
git stash pop # Применить stash
git rebase <branch> # Перебазировать ветку
git tag <name> # Создать тег
git log --oneline # Краткий лог коммитов


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍7
Ссылки на методы и функциональные интерфейсы:

Познакомься с ссылками на методы — более чистым и умным способом передавать поведение в современной Java.

В связке с функциональными интерфейсами они позволяют писать лаконичный, читаемый и элегантный код без потери типобезопасности и выразительности.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍32
JetBrains меняет дистрибуцию IntelliJ IDEA

Теперь не будет отдельных установщиков для Community и Ultimate будет единый инсталлятор с полным набором функций.

Подписка по-прежнему нужна для доступа к функциям Ultimate Edition, но без подписки IDE останется полностью рабочей и бесплатной, включая больше возможностей, чем сейчас в Community Edition.

Что ещё важно:

🔸Открытые сборки будут публиковаться на GitHub.
🔸Если подписка истечёт, IDE не заблокируется — вы продолжите работать в режиме Community Edition.
🔸Улучшенный опыт с управлением лицензиями.

Поддержка open-source и бесплатного использования остаётся приоритетом JetBrains. 🐒

Подробнее по ссылке - jetbrains.com/blog

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍209🔥5🌚1
Совет по Java: используйте HashMap как реализацию Map, когда нужна максимальная производительность общего назначения.

HashMap внутри реализован как хеш-таблица, и в среднем операции put(), get() и remove() работают за O(1).

Но, он не потокобезопасен (используйте ConcurrentHashMap, если нужна потокобезопасность).

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍10
Телеграфируем кодом Морзе через Java Stream API

Как с помощью Java Stream API реализовать кодирование и декодирование текста в азбуке Морзе. Объясняется история азбуки Морзе, принципы её работы и показано практическое применение функционального программирования в Java для преобразования текста в Морзе и обратно. Приятного изучения 💊

Читать гайд

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥53
JVM Thread dump

Сегодня поговорим о тред дампах.

Что такое тред дамп? 🌟

Это распечатка всех стектрейсов(всех выполняющихся методов) всех существующих тредов внутри JVM.

Зачем снимать треддамп?

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

То есть тред дамп позволят заглянуть внутрь JVM и понять чем занимаются все треды.

Так же тред дамп показывает статус всех тредов ( RUNNABLE, WAITING, TIMED WAITING )

Как снимать треддамп?

Существует несколько команд:

1) jstack

jstack <pid>


2) jcmd

jcmd <pid> Thread.print


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51
👩‍💻 Всем программистам посвящается!

Вот 17 авторских обучающих IT каналов по самым востребованным областям программирования:

Выбирай своё направление:

👩‍💻 Java — t.iss.one/java_ready
📱 GitHub & Git — t.iss.one/github_ready
👩‍💻 Python — t.iss.one/python_ready
🤔 InfoSec & Хакинг — t.iss.one/hacking_ready
🖥 SQL & Базы Данных — t.iss.one/sql_ready
👩‍💻 Linux — t.iss.one/linux_ready
🖼️ DevOpst.iss.one/devops_ready
👩‍💻 C/C++ — https://t.iss.one/cpp_ready
👩‍💻 C# & Unity — t.iss.one/csharp_ready
🤖 Нейросетиt.iss.one/neuro_ready
👩‍💻 Frontend — t.iss.one/frontend_ready
📱 JavaScript — t.iss.one/javascript_ready
👩‍💻 Backend — t.iss.one/backend_ready
📖 IT Книги — t.iss.one/books_ready
👩‍💻 Весь IT — t.iss.one/it_ready
👩‍💻 Bash & Shell — t.iss.one/bash_ready
🖥 Design — t.iss.one/design_ready

📌 Гайды, шпаргалки, задачи, ресурсы и фишки для каждого языка программирования!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣2😁1
Вкратце как работает аутентификация через куки, сессии, токены, JWT, SSO и OAuth2

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3