В настоящее время я тестирую некоторые новые правила сонара. С новыми правилами сонара появился новый запах кода. Msgstr "Лямбда должна быть заменена ссылками на методы".
Я думаю, что правило довольно круто, но с 1 случаем у меня есть некоторые проблемы
Я приведу пример, и, возможно, кто-то может объяснить этот случай:
В настоящее время вызов выглядит так:
rxTransaction( () -> new SubscriptionJavaLite( subscription ).toSubscription());
Моей первой наивной мыслью (а также предложением Intellij) было использование следующих методов:
rxTransaction( new SubscriptionJavaLite( subscription )::toSubscription);
Итак, Сонар был доволен, и все выглядит одинаково. Но это больше не эквивалентно, потому что new SubscriptionJavaLite
выполняется в разное время:
Случай 1 запускает rxTransaction -> new SubscriptionJavaLite
Случай 2 выполняет новую SubscriptionJavaLite -> rxTransaction. Почти раньше.
Можно ли решить дело иначе? Является ли этот вывод ошибкой из правила сонара?
Теперь я не хочу писать SupressWarning во всех случаях.
Спасибо за помощь.