DataflowAnomalyAnalysis:发现变量“变量”的“DD”异常(行“n1”-“n2”)。
DataflowAnomalyAnalysis:发现变量“变量”的“DU”异常(行“n1”-“n2”)。
不知道。
NullAssignment:将 Object 分配给 null 是一种代码味道。考虑重构。
如果对象是本地对象(不在方法之外使用),是否不会设置对象来null
协助垃圾收集?或者这是一个神话?
一旦方法返回,本地方法中的对象就会被标记为垃圾回收。将它们设置为 null 不会有任何区别。
由于它会使经验较少的开发人员变得缺乏经验,所以关于它的空赋值可能被认为是代码异味。
MethodArgumentCouldBeFinal:未分配参数“param”,可以声明为 final
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();
}
}
假设你被分配去解决一些不时烧毁房子的神秘虫子。
您知道使用的参数是什么,您不明白的是,如果不满足条件,为什么会调用该burnTHeHouse
方法(根据您的发现)
您需要花一些时间才能发现在中间的某个点,某人更改了引用,并且您正在使用其他对象。
使用final
帮助来防止这种事情发生。
LooseCoupling:避免使用“LinkedList”等实现类型;改用界面
如果我知道我特别需要一个LinkedList
,为什么我不使用一个来向未来的开发人员明确表达我的意图?返回有意义的类路径中最高的类是一回事,但是为什么我不将变量声明为最严格的呢?
在这种情况下,没有区别。我认为,由于您没有使用LinkedList
特定功能,因此该建议是公平的。
今天,LinkedList 可能是有意义的,但是通过使用一个界面,您可以帮助您自己(或其他人)轻松更改它。
对于小型的个人项目,这可能根本没有意义,但由于您已经在使用分析器,我想您已经关心代码质量了。
此外,还可以帮助经验不足的开发人员养成良好的习惯。[我不是说你是其中之一,但分析仪不认识你;)]
AvoidSynchronizedAtMethodLevel:使用块级而不是方法级同步
块级同步比方法级同步有什么优势?
同步部分越小越好。而已。
此外,如果您在方法级别进行同步,您将阻塞整个对象。当您在块级别同步时,您只需同步该特定部分,在某些情况下这就是您需要的。
AvoidUsingShortType:不要使用短类型
我的第一门语言是 C 和 C++,但在 Java 世界中,我为什么不使用最能描述我的数据的类型呢?
我从来没有听说过这个,我同意你的观点:)我从来没有使用过short。
我的猜测是,如果不使用它,您将帮助自己 int
无缝升级。
代码异味更注重代码质量而不是性能优化。因此,建议是针对经验不足的程序员并避免陷阱,而不是提高程序速度。
这样,您可以在尝试更改代码以适应更好的设计时节省大量时间和挫败感。
如果建议没有意义,请忽略它们,记住,您是负责的开发人员,而该工具只是一个工具。如果出现问题,你不能责怪工具,对吧?