【发布时间】:2015-01-13 20:48:10
【问题描述】:
这是 Eclipse 为我生成的 hashCode() 方法:
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (id ^ (id >>> 32));
return result;
}
当我对此运行 findbugs 时,它会抱怨最后一行:
方法 ...hashCode() 将返回结果存储在本地,然后立即返回[Scarest(2), 正常置信度]
谁在这里? Findbugs 还是 Eclipse?这很狡猾吗?
我这辈子都无法理解为什么这会让 findbugs 感到不安。代码非常清晰;在返回之前将其存储在本地不会使其更难阅读或更难维护;除非编译器写得很糟糕,否则它也不会对性能产生任何影响。
然而这被归类为最可怕!
我错过了什么吗?
(很明显,代码可以在某些方面进行简化,之所以这样,是因为就 Eclipse 而言,可能还有其他字段进入散列函数。但具体而言我在这里询问的存储值然后立即返回它的问题,因为这就是 findbugs 所抱怨的。)
【问题讨论】:
-
我认为不必要的行确实会使代码更难阅读和维护 - FindBugs 也有同样的感觉。
-
这篇文章与您所问的类似,并且还有一些未在此处列出的答案。 stackoverflow.com/questions/15078153/…
-
我不禁注意到
findbugs抱怨可以通过直接返回表达式来简化代码。但它显然认为乘以一个已知为 1 的变量只是桃子 - 没有什么不简单的!我的直觉是,除了娱乐之外,不应该尝试使用自动化工具来检测由另一个自动化工具生成的代码中的样式问题。 -
Findbugs 很少对任何事情都“正确”;它只是突出显示不符合配置标准的事物。根据我的经验,FB 需要进行大量调整才能实用,以至于它变得不切实际。
-
@ajb 这不是那么先进的工具。大多数情况下,它只是一个匹配单个模式的插件。 (当然还有一些更高级的)
标签: java eclipse findbugs local-variables