В общем, этого я и боялся. Я ожидал, что тот факт, что Java 17 будет LTS, будет сдерживающим фактором не пихать туда preview-фичи, но нет. Они всё-таки хотят засунуть JEP 406 в релиз.
Чем это плохо? Это значит, что IDE будут обязаны поддерживать вот эту предварительную версию Pattern Matching for switch много лет. И при этом одновременно поддерживать стабильную версию, которая выйдет где-то в районе Java 19. Поддерживать две версии одной фичи много лет – прям совсем плохо. Дай бог, если они не будут сильно отличаться.
#Java17
Чем это плохо? Это значит, что IDE будут обязаны поддерживать вот эту предварительную версию Pattern Matching for switch много лет. И при этом одновременно поддерживать стабильную версию, которая выйдет где-то в районе Java 19. Поддерживать две версии одной фичи много лет – прям совсем плохо. Дай бог, если они не будут сильно отличаться.
#Java17
У вас есть в проекте какие-нибудь утилитные методы, которых вам не хватает в стандартной библиотеке? Меня вот задалбливает каждый раз писать:
Ещё несколько методов:
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);
А у вас есть что-то подобное? Пишите примеры в комментариях.Сегодня узнал забавный факт, что
Чуть больше про это можно прочитать здесь.
Comparator.comparing(String::toLowerCase) не компилируется, в то время как Comparator.comparing((String s) -> s.toLowerCase()) прекрасно работает. Проблема в том, что у String.toLowerCase() есть две перегрузки: одна без аргументов, а другая - с Locale. При чём здесь вторая перегрузка, которая вообще не приминима здесь по сигнатуре Function? А пёс его знает. Вот так работает компилятор.Чуть больше про это можно прочитать здесь.
Stack Overflow
Invalid method reference for overloaded method with different arities
When trying to compile the expression Comparator.comparing(String::toLowerCase), the Java Compiler returns an error. See the following question for more information:
Why Comparator.comparing doesn...
Why Comparator.comparing doesn...
А вот это прикольно. Оказывается, почти все классы в java.util.concurrent являются общественным достоянием. Например, AtomicReference, ConcurrentHashMap, Semaphore, CountDownLatch, ReentrantLock, ForkJoinPool и т.д. Единственное исключение – CopyOnWriteArrayList 😀 (Наверное потому, что когда писался, многие куски были скопированы из ArrayList, а тот не является public domain).
Что значит общественное достояние? Значит, что Sun отказался от авторских прав на эти классы, это собственность всего общества. То есть исходный код классов можно копировать, изменять, распространять, продавать без разрешения.
#concurrency
Что значит общественное достояние? Значит, что 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)
Где? Онлайн, бесплатно
Язык докладов: русский
👉 Регистрация
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)
Где? Онлайн, бесплатно
Язык докладов: русский
👉 Регистрация
Вам надо отсортировать список List<Date> по возрастанию. Какой вариант вы выберете?
Final Results
4%
list.sort(null)
27%
list.sort(Comparator.naturalOrder())
31%
Collections.sort(list)
15%
Collections.sort(list, Comparator.naturalOrder())
23%
Затрудняюсь с ответом
Какой у вас процесс ревью?
Final Results
82%
Пост-коммит. Изменения лежат во временном бранче, а потом мёржатся в основной.
4%
Пост-коммит. Изменения сразу попадают в основной бранч, а оттуда ревьюятся.
5%
Пре-коммит. Изменения вообще не коммитятся никуда, пока их не проверят.
3%
Парное программирование
10%
Ревью вообще отсутствует
1%
Другое (напишу в комментах)
Мой топ фишек, ради которых хочется перейти на 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 на более новую версию?
• 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 на более новую версию?