DataflowAnomalyAnalysis: 发现变量 'variable' 在行号 'n1'-'n2' 中存在 'DD'-异常。
DataflowAnomalyAnalysis: 发现变量 'variable' 在行号 'n1'-'n2' 中存在 'DU'-异常。
不知道。
NullAssignment: 将对象赋值为 null 是一种代码异味。考虑重构。
如果对象是局部对象(在方法外部未使用),将其设置为 null 是否有助于垃圾回收?或者这是一个谣言吗?
在本地方法中的对象在方法返回后被标记为可进行垃圾回收。将它们设置为 null 不会有任何区别。
由于它会让经验较少的开发人员感到困惑,因此可能被视为代码异味。
MethodArgumentCouldBeFinal: 参数 'param' 未被分配,可以声明为 final
LocalVariableCouldBeFinal: 本地变量 'variable' 可以声明为 final
使用 final
参数和变量有什么优点吗?
它使得值在对象的生命周期内不会改变更清晰。
此外,如果有人尝试分配一个值,编译器将在编译时防止这种编码错误。
考虑以下示例:
public void businessRule( SomeImportantArgument important ) {
if( important.xyz() ){
doXyz();
}
important = new NotSoImportant();
if( important.abc() ){
burnTheHouse();
}
}
假设你被指派解决一些神秘的错误,有时会导致房屋着火。您知道使用了哪个参数,但不理解为什么(根据您的发现)如果条件不满足,则调用
burnTheHouse
方法的原因。
某人在中途更改了引用,而您正在使用
其他对象。使用
final
可以帮助防止这种情况发生。松耦合:避免使用实现类型(如'LinkedList'),而是使用接口。在这种情况下没有区别。我认为,由于您未使用
LinkedList
特定功能,因此该建议是合理的。今天,LinkedList可能是有意义的,但通过使用接口,您可以帮助自己(或他人)在不需要时轻松更改它。对于小型个人项目,这可能根本没有意义,但由于您已经在使用分析器,我想您已经关心代码质量了。此外,还可帮助不太有经验的开发人员养成良好习惯。避免在方法级别同步:使用块级别而不是方法级别同步。较小的同步部分越好。另外,如果您在方法级别同步,将阻止整个对象。当您在块级别同步时,只需同步该特定部分,在某些情况下,这正是您需要的。不要使用短类型。我从未听说过这个,我同意你的看法:)虽然我从未使用过short。我的猜测是,通过不使用它,您将帮助自己无缝升级到
int
。代码异味更注重代码质量而不是性能优化。因此,建议是为了避免陷阱和帮助不太有经验的程序员,而不是为了提高程序速度。这样,当尝试更改代码以适应更好的设计时,您可以节省大量时间和挫折。
如果建议不合理,就忽略它们,记住,你是负责开发的人,而工具只是一个工具。如果出了问题,你不能责怪工具,对吧?
char
,但这与本问题无关。 - erickson