microJUG – Telegram
microJUG
980 subscribers
155 photos
1 video
2 files
237 links
Мысли о Java.
Основной канал: @miniJUG
Буст: https://news.1rj.ru/str/microJUG?boost
Чат: https://news.1rj.ru/str/micro_JUG
Таблица JEP'ов: https://minijug.org/jeps.html
Download Telegram
В общем, этого я и боялся. Я ожидал, что тот факт, что Java 17 будет LTS, будет сдерживающим фактором не пихать туда preview-фичи, но нет. Они всё-таки хотят засунуть JEP 406 в релиз.
Чем это плохо? Это значит, что IDE будут обязаны поддерживать вот эту предварительную версию Pattern Matching for switch много лет. И при этом одновременно поддерживать стабильную версию, которая выйдет где-то в районе Java 19. Поддерживать две версии одной фичи много лет – прям совсем плохо. Дай бог, если они не будут сильно отличаться.
#Java17
Вы знали, что для любого non-generic метода в Java можно указать типы-параметры? Любое количество. Причём даже для конструктора.
Кто-нибудь ещё так делает? 😄
У вас есть в проекте какие-нибудь утилитные методы, которых вам не хватает в стандартной библиотеке? Меня вот задалбливает каждый раз писать:

for (int i = 0; i < list.size(); i++) {
// action using i and list
}

Поэтому я завёл себе метод:

public static <A> void forEachWithIndex(Iterable<A> iterable, ObjIntConsumer<A> consumer) {
int i = 0;
for (A value : iterable) {
consumer.accept(value, i++);
}
}

Теперь можно писать так:

forEachWithIndex(list, <action>);

К тому же работает не только со списками, а с любым Iterable.

Ещё несколько методов:

public static <A, B> List<B> mapList(List<A> list, Function<A, B> f);

public static <A, B> List<B> mapListWithIndex(List<A> list, ObjIntBiFunction<A, B> f); // Пришлось завести ObjIntBiFunction

public static <T> List<T> flattenList(List<? extends List<T>> list);

А у вас есть что-то подобное? Пишите примеры в комментариях.
А javac это дебаггер и jar это статический анализатор
Сегодня узнал забавный факт, что Comparator.comparing(String::toLowerCase) не компилируется, в то время как Comparator.comparing((String s) -> s.toLowerCase()) прекрасно работает. Проблема в том, что у String.toLowerCase() есть две перегрузки: одна без аргументов, а другая - с Locale. При чём здесь вторая перегрузка, которая вообще не приминима здесь по сигнатуре Function? А пёс его знает. Вот так работает компилятор.
Чуть больше про это можно прочитать здесь.
Копец. В книги Кея Хорстманна написано, что hashCode образуется из адреса памяти 🤦‍♂️
И это последнее, 11-е издание книги.
Тестовое задание от кандидата
А вот это прикольно. Оказывается, почти все классы в java.util.concurrent являются общественным достоянием. Например, AtomicReference, ConcurrentHashMap, Semaphore, CountDownLatch, ReentrantLock, ForkJoinPool и т.д. Единственное исключение – CopyOnWriteArrayList 😀 (Наверное потому, что когда писался, многие куски были скопированы из ArrayList, а тот не является public domain).
Что значит общественное достояние? Значит, что Sun отказался от авторских прав на эти классы, это собственность всего общества. То есть исходный код классов можно копировать, изменять, распространять, продавать без разрешения.
#concurrency
Попросили порекламировать бесплатный Java-митап. Вроде норм ребята. Записываемся 👇

17 июня (то есть сегодня) пройдет бесплатный онлайн Java Meetup со спикерами из Red Hat и Levi9.

В программе:
— "По дороге c облаками, Quarkus, Java и Graal’ем", Алексей Лубянский, Principal Software Engineer в Red Hat
— "Производительность: нюансы против очевидностей", Сергей Цыпанов, Senior Java Developer в Levi9.

Модератор мероприятия: Дмитрий Панин, Levi9 Delivery Director.

Когда? 17 июня, 19:00 по Москве (GMT+3)
Где? Онлайн, бесплатно
Язык докладов: русский

👉 Регистрация
Вы уже перешли на Java 11+?
Final Results
59%
Уже да 😊
32%
Ещё нет 😔
9%
Посмотреть ответы
Вам надо отсортировать список List<Date> по возрастанию. Какой вариант вы выберете?
Final Results
4%
list.sort(null)
27%
list.sort(Comparator.naturalOrder())
31%
Collections.sort(list)
15%
Collections.sort(list, Comparator.naturalOrder())
23%
Затрудняюсь с ответом
Туплы или рекорды? Нахер всё, когда есть Map!
У шарпистов бомбит, что в Java паттерн-матчинг сделали лучше и гибче, чем в C#.
Например, возможность писать case String s && s.isBlank() — по-моему, это очень круто. Такой и должен быть паттерн-матчинг.
💉 Вы привились от COVID-19?
Final Results
34%
Да, обе дозы
13%
Первую дозу только
53%
Нет
Скомпилируется код или нет?
Final Results
72%
Скомпилируется
28%
Не скомпилируется
Какой способ предпочитаете?
#юмор
Мой топ фишек, ради которых хочется перейти на Java 16 (не язык, только JVM и API). То есть то, что появилось в Java 12-16:

Stream.toList()
Collectors.teeing()
String.formatted()
Аннотация java.io.Serial
Lookup.defineHiddenClass() (но не уверен, что смогу найти реальное применение)
JEP 341: Default CDS Archives (ну типа, всё быстрее будет стартовать)
JEP 346: Promptly Return Unused Committed Memory from G1 (приложение будет кушать меньше памяти)
JEP 358: Helpful NullPointerExceptions
Field layout computation overhaul (более компактные объекты). Ну и вообще подобного рода мелкие оптимизации, которые в целом делают JVM чуть-чуть быстрее.

А ради чего вы хотите перейти с Java 11 на более новую версию?