Этот код:
Set<Map.Entry<String, SSGSession>> theSet = new TreeSet<Map.Entry<String, SSGSession>>(new Comparator<Map.Entry<String, SSGSession>>() {
@Override
public int compare(final Map.Entry<String, SSGSession> e1, final Map.Entry<String, SSGSession> e2) {
return e2.getValue().getStartTime().compareTo(e1.getValue().getStartTime());
}
}));
вызывает нарушение в Sonar, отключая правило findbugs "SIC_INNER_SHOULD_BE_STATIC_ANON", в котором есть описание:
Этот класс является внутренним классом, но не использует встроенную ссылку к объекту, который его создал. В этой ссылке приводятся примеры класс больше, и может содержать ссылку на объект-создатель живее дольше, чем необходимо. Если возможно, класс должен быть сделан в статический внутренний класс. Поскольку анонимные внутренние классы не могут быть помечены как статические, для этого потребуется рефакторинг внутреннего класса так что это именованный внутренний класс.
Действительно? Разве это не самое придирчивое? Должен ли я действительно реорганизовать метод одной строки в анонимном внутреннем классе, чтобы сохранить стоимость дополнительной ссылки? В этом случае нет возможности удерживать ссылку дольше, чем необходимо.
Я не возражаю против этого, так как наши строго соблюдаемые стандарты кодирования являются "нарушениями сонара со звуком", но я сильно склонен рассуждать об этом для //NOSONAR
здесь, поскольку imho, извлекающий один метод линии для статического внутреннего делает код немного сложнее для grok.
Что думают кураторы java?