Получи случайную криптовалюту за регистрацию!

Java: fill the gaps

Логотип телеграм канала @java_fillthegaps — Java: fill the gaps J
Логотип телеграм канала @java_fillthegaps — Java: fill the gaps
Адрес канала: @java_fillthegaps
Категории: Технологии
Язык: Русский
Количество подписчиков: 10.33K
Описание канала:

Привет! Меня зовут Диана, и я занимаюсь java разработкой с 2013г.
Делюсь опытом/знаниями по темам:
- Java Core
- Вопросы с собеседований
- Best practices
Комплименты, вопросы, предложения: @utki_letyat

Рейтинги и Отзывы

4.50

2 отзыва

Оценить канал java_fillthegaps и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

0

2 звезд

0

1 звезд

0


Последние сообщения 17

2021-05-21 09:00:10Вопрос
В классе User хранится статус в виде enum State.

В каком порядке и как будут создаваться объекты при первом вызове User user = new User()?
1.3K views06:00
Открыть/Комментировать
2021-05-19 09:00:16 Enumerations, часть 2: практика

В прошлом посте разобрали, из чего сделан enum. В этом - разберёмся, как его использовать.

Набор констант

Самый простой и популярный случай. Используем enum как поле класса или локальную переменную. Проверяем значение через if / switch и делаем ветвления в коде:

if (state == UserState.NEW) {…}

Паттерн Singleton

Вообще синглтон - антипаттерн и антитренд. Если без него никак - рассмотрите вариант с enum. Если вы склонны к риску, можно сделать изменяемые поля.

Может быть несколько объектов в рамках одного enum
Доступ из любого места в коде
Ленивая инициализация

Паттерн State

Более продвинутый вариант, чем "набор констант". Здесь фокус на данных: используются связанные значения, а не элемент enum сам по себе.

Пример: в статус пользователя вносим дополнительные поля - необходимость подтверждения личности и максимальный размер скидки:

enum UserState {
NEW(true, 10),
VALIDATED(false, 25),
FRAUD(true, 0);

boolean needConfirmation;
int maxDiscount;
}

Паттерн Strategy

Здесь фокус на разнице в поведении. Абстрактный метод переопределяется для каждого экземпляра:

NEW { boolean check(Order){…}},
VALIDATED { boolean check(Order){…}};

abstract boolean check(Order order)

Подойдёт для алгоритмов, конвертеров, сортировок
Простая иерархия, всё в одном классе
Список всех значений доступен через values()
Весь код в одном файле. Не всегда удобно
Сложно связать с другими объектами
Нарушается принцип open for extension but closed for modification

Получается специфическая альтернатива полиморфизму, но иногда ок.

Enum - не просто набор констант. Инструмент своеобразный, но полезно знать и такие реализации паттернов. Чем шире арсенал разработчика, тем выше шанс найти подходящее решение.
1.4K views06:00
Открыть/Комментировать
2021-05-19 09:00:15Вопрос
Enum Formatter занимается форматированием строк в заданные форматы. Во время работы было выполнено 50 форматирований в XML, в JSON - 30, в YAML - 5.

Что вернёт метод Formatter.JSON.getCount()?
1.4K views06:00
Открыть/Комментировать
2021-05-17 09:00:35 Enumerations, часть 1: обзор

Внутри JVM нет такого понятия как enum. Енумы компилируются в обычный класс, а значения - в статические экземпляры:

public final class Planet extends Enum {
public static final Planet EARTH;
public static final Planet MARS;
}

Полноценные классы c конструкторами, методами, полями и статическими элементами. У экземпляров есть состояние и определённое поведение.

Но есть нюансы:

Суперкласс Enum

От суперкласса Enum наследуются методы name(), ordinal() и статический метод values().
name() возвращает имя переменной, ordinal() - порядковый номер в списке. На практике эти методы достаточно бесполезны.

Метод values() используется чаще и возвращает массив всех объектов. Можно пройтись по нему в цикле:
for (Planet p : Planet.values()) {…}

или через Stream API:
Arrays.stream(Planet.values()).forEach(…)

Интерфейсы суперкласса

Enum реализует три интерфейса: Comparable, Serializable, Constable.

Первые два всем знакомы. Интерфейс Constable определяет методы для размещения объектов в пуле констант внутри JVM.

Создание экземпляров

Этим занимается JVM на старте приложения. Экземпляры енума создаются через приватный конструктор, недоступный вне енума.

Поля

Указываются для каждого экземпляра, инициализируются в конcтрукторе:

public enum Planet {
MARS(3389),
EARTH(6371);
int radius;

Planet(int radius) {
this.radius = radius;
}
}

Два типа методов

Обычные
public int getRadius()

Используется для геттеров и простых вычислений.

В теории можно сделать set* метод и поменять поле у любого экземпляра. Но на практике так никто не делает. Когда объект доступен из любого места системы, то проще жить, если он неизменяемый.

Абстрактные
Каждый экземпляр определяет свою реализацию:

public enum Planet {
MARS {
int distanceFrom(int) {…}
},
EARTH {
int distanceFrom(int) {…}
};

abstract int distanceFrom(int);
}

Наследование

Любой enum - это final класс с уже определённым суперклассом. Единственный шанс встроить enum в иерархию - добавить для него интерфейс.

Иногда это удобно. Если у енумов и классов один интерфейс, то с ними можно работать через один метод:

interface SpaceObject

enum Planet implements SpaceObject
class Meteor implements SpaceObject

public void getInfo(SpaceObject so)
1.6K views06:00
Открыть/Комментировать
2021-05-17 09:00:35 ​В enum Planet есть метод getRadius. В классе Meteor тоже он есть. Мы хотим сделать метод getInfo, который работает с обеими сущностями и вызывает их метод getRadius.

Вопрос: что будет вместо солнышка во входном параметре?
(щёлкните по картинке, чтобы открыть полностью)
1.5K views06:00
Открыть/Комментировать
2021-05-17 09:00:35 Собеседование:
- Расскажите про enumerations.
- Ну, это набор констант
- Как их можно использовать в коде?
- Как набор констант
(что им надо?)
- А как они реализованы в JVM?
- Как константы
(спросите лучше про хэшмэп)

Чтобы не получилось такой ситуации, на этой неделе разберёмся с темой перечислений. Enum - очень полезные конструкции. С ними код становится проще и безопаснее. Если их использовать, конечно.

План такой:
Часть 1 - обзор enumerations
Часть 2 - как используется на практике
Часть 3 - разберём загрузку классов и душный вопрос с собеседования
1.6K views06:00
Открыть/Комментировать
2021-05-13 09:00:31 Закулисье курса по многопоточке

19 апреля стартовал первый поток курса по многопоточному программированию на java. Хочу рассказать, что там происходит и поделиться мыслями по этому поводу.

О чём вообще речь.

В прошлом году я начала готовить курс по многопоточке на java. Тема важная и сложная, а хороших материалов очень мало. Получился двухмесячный концентрированный курс: уроки с заданиями выходят три раза в неделю. Три недели назад стартовал первый поток, поэтому можно уже поделиться результатами.

По цифрам:
Участники с опытом от года до 8 лет
33% выполняют задания к уроку в течение 2 дней
60% - в течение недели
Самая активное время сдачи ДЗ - с 22 до часу ночи
1 человеку не подошёл формат, вернула деньги

Что говорят ребята:
Курс действительно заполняет пробелы. Интересна точка зрения опытного разработчика на проблемы
Большое спасибо, что вы находите время писать развернутые комментарии и отвечать на смежные вопросы!) Это круто)
Если говорить в целом - то я очень доволен курсом
Сложно конечно, много нового для меня, не всегда успеваю сразу сдавать. Но чувствую, что полезно))

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

Поэтому в июле планирую повторить. Тоже с небольшой группой, не больше 20 учеников. В предварительном списке уже больше 40 человек! Если тоже хотите первыми узнать дату старта и условия, вписывайтесь сюда:

Предварительный список на двухмесячный курс по java.util.concurrent и смежным вопросам
4.7K views06:00
Открыть/Комментировать
2021-05-11 09:00:58 11 шагов к Senior Google User

Главный навык разработчика - умение пользоваться интернетом. Чтобы занять голову не регулярками и опциями докера, а действительно важными вещами. Вот несколько приёмов для быстрого и чёткого поиска.

Искать по-английски
Материала больше, обычно он приятнее и понятнее русских аналогов.

Кавычки для поиска конкретной фразы
"parse pdf to xml"

Чтобы пропустить часть фразы, используйте звёздочку:
"java regex * tutorial"

AND
Обязательное вхождение обоих слов / фраз

"Spring in Action" AND "Евгений Борисов"

OR
Для поиска одного из вариантов

"how to do java" OR "java for beginners"

Исключить ключевое слово через минус
java types -javascript

Работает и для сайтов:
как пройти собеседование -otvet.mail.ru

Поиск на конкретном сайте
NPE site:stackoverflow.com

Найти файлы
Удобно искать книжки, презентации к докладам

"effective java" filetype:pdf

Найти только свежие / старые материалы
thread safety before:2020
functional programming after:2020-12-20

Быстрый перевод
coherence in russian
resilience по русски

Сложный поиск
Чтобы не запоминать эти приёмчики, есть страница Advanced Search с формочками для всех критериев и опцией "Скрывать непристойные результаты".

Бонусный пункт для владельцев Android со связанным Google аккаунтом:

find my phone в строке поиска. Даже если звук на телефоне выключен, можно включить звонок и найти телефон.
891 views06:00
Открыть/Комментировать