DataflowAnomalyAnalysis:找到
'DD'-变量'variable'的异常
(行'n1'-'n2')。
DataflowAnomalyAnalysis:找到
'DU' - 变量'variable'的异常
(行'n1'-'n2')。
不知道。
NullAssignment:将对象分配给
null 是一种代码味道。考虑
重构。
如果对象是本地对象(不在方法之外使用),是否将对象设置为 null 有助于垃圾回收?还是那是一个神话?
一旦方法返回,本地方法中的对象将被标记为垃圾回收。将它们设置为 null 不会有任何区别。
因为它会使开发人员缺乏经验,所以关于它的 null 赋值可能被认为是代码异味。
MethodArgumentCouldBeFinal:参数
'param' 未分配,可能是
最终宣布
LocalVariableCouldBeFinal:本地
可以声明变量“变量”
最终
使用final参数和变量有什么好处吗?
更清楚地表明,值在对象的生命周期内不会改变。
此外,如果有人尝试分配一个值,编译器将在编译类型时防止此编码错误。
考虑一下:
public void businessRule( SomeImportantArgument important ) {
if( important.xyz() ){
doXyz();
}
// some fuzzy logic here
important = new NotSoImportant();
// add for/if's/while etc
if( important.abc() ){ // <-- bug
burnTheHouse();
}
}
假设你被指派去解决一个不时烧毁房子的神秘虫子。
你知道什么浪费了参数,你不明白的是WHY如果条件不满足,就会调用burnTHeHouse方法(根据你的发现)
您会花一些时间发现在中间的某个点,somone 更改了引用,并且您正在使用 other 对象。
使用final 有助于防止此类事情发生。
LooseCoupling:避免使用
实现类型如
'链表';使用界面
而是
如果我知道我特别需要LinkedList,为什么我不使用它来向未来的开发人员明确表达我的意图?返回有意义的类路径中最高的类是一回事,但为什么我不声明我的变量是最严格的?
在这种情况下没有区别。我认为由于您没有使用 LinkedList 特定功能,因此该建议是公平的。
今天,LinkedList 可能是有意义的,但是通过使用一个界面,您可以帮助您自己(或其他人)轻松地更改它。
对于小型的个人项目,这可能根本没有意义,但由于您已经在使用分析器,我猜您已经关心代码质量了。
此外,还可以帮助经验不足的开发人员养成良好的习惯。 [我不是说你是其中之一,但分析器不认识你;)]
AvoidSynchronizedAtMethodLevel:使用
块级而不是方法级
同步
块级同步相比方法级同步有什么优势?
同步部分越小越好。就是这样。
此外,如果您在方法级别进行同步,您将阻塞整个对象。当您在块级别同步时,您只需同步该特定部分,在某些情况下这就是您需要的。
AvoidUsingShortType:不要使用
短型
我的第一门语言是 C 和 C++,但在 Java 世界中,我为什么不使用最能描述我的数据的类型?
我从来没有听说过这个,我同意你的看法:) 不过我从来没有使用过short。
我的猜测是,如果不使用它,您将帮助自己无缝升级到int。
代码异味更注重代码质量而不是性能优化。因此,建议是针对经验不足的程序员并避免陷阱,而不是提高程序速度。
这样,您可以在尝试更改代码以适应更好的设计时节省大量时间和麻烦。
如果建议没有意义,请忽略它们,记住,您是负责的开发人员,而工具只是一个工具。如果出现问题,你不能责怪工具,对吧?