数据流异常分析:发现变量“变量”的“DD”异常(行“n1”-“n2”)。
数据流异常分析:发现变量“变量”的“DU”异常(行“n1”-“n2”)。
不知道。
NullAssignment:将 Object 赋给 null 是一种代码异味。考虑重构。
如果对象是本地对象(不在方法外部使用),那么将对象设置为 null
难道不会有助于垃圾回收吗?还是说这是个神话?
一旦方法返回,本地方法中的对象将被标记为垃圾回收。将它们设置为 null 不会产生任何差异。
由于它会使开发人员经验不足,因此空赋值的所有内容都可以被视为代码异味。
MethodArgumentCouldBeFinal:参数'param'未分配,可以声明为最终参数
局部变量CouldBeFinal:局部变量“变量”可以声明为最终变量
使用最终
参数和变量有什么好处吗?
它更清楚地表明,该值在对象的生命周期中不会更改。
此外,如果有人试图分配一个值,编译器将防止编译类型出现此编码错误。
考虑一下:
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
你需要一段时间才能发现,在中间的某个点上,somone改变了引用,并且你正在使用其他对象。
使用帮助来防止这种事情。final
松散耦合:避免使用“LinkedList”等实现类型;改用界面
如果我知道我特别需要一个LinkedList,为什么我不会使用一个LinkedList
来向未来的开发人员明确表达我的意图呢?返回在有意义的类路径上最高的类是一回事,但是为什么我不声明我的变量是严格意义上的呢?
在这种情况下,没有区别。我认为,由于您没有使用特定功能,因此建议是公平的。LinkedList
今天,LinkedList可能是有意义的,但是通过使用一个界面,你可以帮助你的自己(或其他人)在它不会的时候轻松改变它。
对于小型的个人项目,这可能根本没有意义,但是由于您已经在使用分析器,我想您已经关心代码质量了。
此外,帮助经验不足的开发人员养成良好的习惯。[我不是说你是其中之一,但分析仪不知道你;)]
避免同步方法级别:使用块级别而不是方法级别同步
块级同步与方法级同步相比有哪些优势?
同步部分越小越好。就是这样。
此外,如果在方法级别进行同步,则会阻止整个对象。当您在块级别进行同步时,您只需同步该特定部分,在某些情况下,这就是您需要的。
避免使用短类型:不使用短整型
我的第一语言是C和C++,但在Java世界中,为什么我不应该使用最能描述我的数据的类型呢?
我从来没有听说过这个,我同意你:)我从来没有用过短。
我的猜测是,如果不使用它,你将帮助你的自我无缝升级。int
代码异味比性能优化更注重代码质量。因此,建议给经验不足的程序员并避免陷阱,而不是提高程序速度。
这样,在尝试更改代码以适应更好的设计时,您可以节省大量时间和挫折感。
如果建议没有意义,请忽略它们,请记住,您是负责的开发人员,而该工具只是一个工具。如果出现问题,你不能责怪工具,对吧?