这段代码:
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",该规则的描述如下:
这个类是一个内部类,但它没有使用其嵌入式引用来引用创建它的对象。这个引用会使得类的实例变大,并且可能会比必要的时间长保留对创建对象的引用。如果可能的话,应该将该类改为静态内部类。由于匿名内部类无法被标记为静态,因此需要重构内部类使其成为命名内部类。
真的吗?这不是非常挑剔吗?我真的应该重构匿名内部类中的一个一行方法来节省额外引用的成本吗?在这种情况下,它不可能保留对引用比必要更长的引用。
我们的编码标准严格执行"零Sonar违规",我不介意这样做,但我强烈倾向于在这里争论一个//NOSONAR
,因为在我看来,将一个一行方法提取到静态内部类中使得代码稍微难以理解。
Java纯粹主义者怎么想?