goto это неиспользуемое зарезервированное слово, просто на всякий
случай…
goto в паре с break, continue и помеченных блоков
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😁1🤔1
Java предоставляет множество возможностей для оптимизации производительности приложений.
java -XX:+UseG1GC G1GCExample
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
В Java мы не можем просто так определить псевдоним на верхнем уровне. Но мы можем сделать так для потребностей класса либо метода. Давайте предположим что нас не устраивают такие имена как
Integer
, Long
и т.д. и мы хотим имена по короче: I
и L
. Да легко:class Test {
void x(I i, L l) {
System.out.println(
i.intValue() + ", " +
l.longValue()
);
}
}
Integer
преобразован в I
для видимости класса Test
в то время как Long
преобразован в
L
для нужд метода х()
. Теперь мы можем вызвать этот метод следующимобразом:
new Test().x(1, 2L);
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10😁2❤1
DelayQueue - особый тип коллекции Java для сортировки элементов по времени задержки.
getDelay
из интерфейса Delayed
.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1😢1
Java предоставляет мощные инструменты для логирования, позволяя разработчикам легко отслеживать и управлять выводом логов.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
Java 8 значительно улучшила API обработки времени, и дополнительная библиотека, такая как Joda Time, стала часто не нужна.
B
.Только не спрашивайте, почему он называется B. Кстати, вот фрагмент шаблонных букв и символов, обрабатываемых DateTimeFormatter.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Java Concurrent - один из самых интересных и в то же время малоизвестных пакетов Java, особенно среди разработчиков, работающих с веб-фреймворками.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Утилитарные классы предназначены не для создания объектов, а для предоставления статических методов для выполнения общих функций. Если вы пишете слишком много таких классов, пересмотрите свой подход к проектированию кода.
Однако иногда они необходимы, например, для реализации внутренних предметно-ориентированных языков (DSL) в Java. В таких случаях часто отступают от принципов ООП, чтобы сделать синтаксис короче.
• Сделайте конструктор приватным, чтобы класс нельзя было создать.
• Сделайте класс final, чтобы его нельзя было наследовать.
• Объединяйте методы в утилитарные классы по функциональности. Избегайте общих названий, таких как MvcUtils или CommonUtils.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Reflection позволяет динамически выполнять код, что может быть полезно, но злоупотребление ею снижает поддерживаемость кода.
Например, копирование полей объектов через рефлексию может выглядеть удобным, но добавляет сложности и потенциальные ошибки. Лучше явно копировать свойства, что делает код проще и более читаемым.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤔4
При добавлении двух строк в цикле (
for
, while
, do-while
), использование оператора +
приводит к растрате памяти и увеличению времени выполнения.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16
Please open Telegram to view this post
VIEW IN TELEGRAM
Возможно, если вы пишете на Java, то у вас в проекте есть код похожий на этот:
Map<String, Integer> data = ...;
for (String s : strings) {
if (!data.containsKey(key))
data.put(key, 0);
data.put(key, data.get(key) + 1);
}
Суть проста. Есть отображение из строки в счетчик, сколько раз мы встретили эту строку. Надо только не забывать инициализировать позиции Map‘а нулем, а то виртуальная машина в вас NullPointerException кинет.
for (String s : strings)
data.merge(s, 1, (a, b) -> a + b);
Meтод merge принимает ключ, значение и функцию которая объединяет заданное значение и уже существующее в отображении, если таковое имеется. Если в отображении под заданным ключем значения нет, то кладет туда указанное значение.
•
computeIfAbsent()
– возвращает или значение из отображения по ключу, или создает его, если его не было;•
cputIfAbsent()
– добавляет значение в отображение, только если его там не было. Этот метод ранее имелся только у ConcurrentMap, теперь появился и у Map‘а;•
cgetOrDefault()
– название довольно красноречиво. Возвращает значение из отображения или переданное значение по-умолчанию. На мой взгляд, метод довольно не идиоматичен. Для работы с отсутствующими значениями был добавлен тип Optional, его и следовало использовать. Поэтому, я бы добавил метод: Optional<V> getOptional(K key).Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Тех, кто плотно работает с многопоточностью, ничем не пронять. Они как ветераны Вьетнама, и даже флешбеки по ночам так же мучают. И этой конструкцией их не напугаешь:
// Java 7 и ранее
ThreadLocal<ObjectMapper> mapper = new ThreadLocal<>() {
@Override
protected ObjectMapper initialValue() {
return new ObjectMapper();
}
};
// Java 8
ThreadLocal<ObjectMapper> mapper = withInitial(() -> new ObjectMapper());
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
В Java 8 стало возможным гораздо проще выполнить такую простую задачу как прочитать построчно файл. Это ещё одна задача, которая раньше требовала довольно много кода.
BufferedReader
, поэтому теперь Stream’ы доступны поверх любого InputStream‘а.Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Если вам нужно написать Comparator для сортировки объектов по возрастанию, обычно он выглядит так:
public class ByScoreComparator implements Comparator<User> {
@Override
public int compare(User u1, User u2) {
return (int) signum(u2.getAge() - u1.getAge());
}
}
Теперь это не нужно. Можно использовать ссылки на методы:
Comparator<User> comparator = Comparator
.comparingDouble(User::getAge)
.thenComparing(User::getName);
List<User> hList = ...;
hList.sort(comparator);
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22
Как вы генерируете тестовые данные в ваших модульных тестах? Instancio поможет нам в этом.
Ее цель — сократить время и количество строк кода, затрачиваемых на ручную настройку данных в модульных тестах. Она создает объекты и заполняет их случайными данными, делая наши тесты более динамичными.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7😢1
Datafaker создает фиктивные данные для ваших программ JVM за считанные минуты, используя широкий спектр из более чем 100 поставщиков данных.
Java Learning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10