Pull to refresh
22
0

Пользователь

Send message

Вопрос про JEP-330. Выходит, что классическое разделение JDK/JRE больше не актуально и теперь всё в одном?

Добавление параметров не всегда возможно, как раз в случае, когда в середине вызова - библиотечный код (или наоборот, код приложения, который использует наш как библиотеку), изменить который нельзя. В целом это редкий кейс, но тут без ThreadLocal или аналога не обойтись.

Ricoh в этом смысле оборзел еще больше. Спустя 12 месяцев после покупки лазерный мини-МФУ SP 150SUw просто перестал печатать (это при оригинальном картридже) - это произошло ровно через 365 дней после покупки. При этом признаков того, что краска закончилась, не было. В итоге отнес его в мастерскую на районе - они что-то там перепрошили и он прекрасно работает четвертый год на всё том же оригинальном картридже.

Не совсем айтишное, но по поводу заимствований. Подбешивает, когда год называют на английский манер. Особенно это характерно для спортивных мероприятий, но кажется это уже не только там. Например, 2018 - "двадцать восемнадцать".

Lombok Plugin в IDEA курируется самой JetBrains. Это уже сильный аргумент в пользу будущего развития технологии (по крайней мере новые версии IDEA не останутся внезапно без него)

Что не так с этой функцией

function map(arr, fn) {
  for (var i = 0; i < arr.length; i++) {
    arr[i] = fn(arr[i]);
  }
  return arr;
}

Позволю предположить. Как указано автором, функция меняет входной массив данных. Само по себе это не то чтобы плохо, проблема в том, что она одновременно меняет входной массив данных и возвращает его. Для пользователя этой функции, что не удостоверился в контракте или реализации, может создаться ложное ожидание, что раз функция возвращает массив, то он новый.
Например, метод javascript Array sort делает ровно то же самое - изменяет исходный массив и возвращает его же как результат. IMHO, это дизайн функции ведущий к ошибкам, но здесь видимо мое мнение расходится с авторами JS (как минимум, это позволяет за-inline-ить вызов в цепочке вызовов).

А в другой раз решил последовать безобидному совету IDEA. IDE подстветила два статических поля-pid файл и pid порт, как "convert to local variable". Я и предположить не мог, что это кончится тем, что оба объекта (предусмотренно задублированные, т.к. это было критично) будут собраны GC. И конечно уехал в отпуск на следующий день. Хорошо, что сеньор вовремя заметил задублированные инстансы, последствия не катастрофические (это была платежная система).

Однажды удалил базу данных. Дело было так: попросил админов сделать тестовый стенд по образу и подобию существующего. Проверяю - все так, только зачем-то скопировали и тестовую базу на новый хост. Перед тем как дропать, проверяю заголовок ssh-сессии: я на новой тачке, база в localhost. Жму Enter и понимаю, что внутри ssh сессии - другая сессия, на старый сервер. База хоть и тестовая, но никаких миграций и пр. не было (дело было давно). Синьор сказал: "ну значит сейчас будешь выковыривать SQL по вызовам из кода и восстанавливать схему". Вроде, обошлось.

Допустим, однажды в проекте, который отлично работал (и не менялся), начинает происходить ошибка компиляции из-за обновления прямой (или транзитивной) зависимости. Думаю, большинство разработчиков с этим сталкивались. В первый раз я как опытный джавист, перешел на жесткие версии (в тот раз помогло), но теперь я знаю, что это неправильно.


Вопрос:
1) как в соответствии с изложенным следует поступить? Конкретно какие команды и изменения в package.json, если можно
2) верно ли утверждение, что yarn намного адекватнее и гибче в этом смысле (например, в прибивании жесткой версии пакета, когда это необходимо). Или же в поздних версиях npm эти проблемы устранены

Тагир, добавил упоминание участия в тексте.

Плагин для Lombok ломается в основном на обновлении IDE, а сам Lombok достаточно стабилен, по крайней мере последняя версия (не могу заверить за фичи, помеченные как experimental). Раньше нужно было подождать, пока плагин зафиксят (делали оперативно), сейчас это будет делать сама JetBrains. Если я неправильно вас понял, прошу разъяснить, что именно имеется в виду.

После переноса Lombok плагина под крышу самого JetBrains произошла его "легализация". По крайней мере, надежды на то, что к его поддержке будут относиться серьезно, только выросли.

Можно. Но не думаю, что это улучшит ситуацию.

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

Да. Там, кстати, наоборот — сам класс, который предоставляет extension-методы, должен быть соответствующе помечен, а в Lombok — класс, который их импортирует. И, как вы написали, проблема manifold (при всем его богатстве функционала) — в том, что плагин платный для IDEA Ultimate, причем ценник хороший.

Такая возможность есть, в lombok.config можно запретить на уровне всего проекта https://projectlombok.org/features/configuration (см. flagUsage)

Lombok предусмотрительно добавил функцию "delombok" для тех, кто разочаровался и передумал. Для большинства кейсов это возможно прямо из интерфейса IDEA (для @ExtensionMethod пока не реализовано).

Вариант с AssertJ дает диагностику только ожидаемое значение vs актуальное. Но ведь там нет указания, какой именно метод был вызван ("SamplePojo::getName"), т.е. AssertJ не резолвит это, а в примере с where-выражением для hamcrest это есть.
По поводу прокси — да, есть такой вариант, но насколько я понял, это требует дополнительных зависимостей вроде cglib, плюс вызов метода, плюс это скорее всего не работает с final-методами, статическими методами, конструкторами.

Похоже, мы решали одну и ту же проблему (null-safety и диагностика), просто зашли с разных сторон — в моем случае — с hamcrest expression.

Неплохой вариант, но, к сожалению не работает начиная с Java 9. Развернутый комментарий написал в статье

Information

Rating
4,341-st
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity