我正在努力解决Java项目中的Checkstyle警告。
假设这是我的方法:
public SomeObject someObjectBehavior(SomeObject oldSomeObject,
SomeObject newSomeObject) {
if(oldSomeObject == null) {
oldSomeObject = newSomeObject;
}
}
当我启用Checkstyle时,它会通知
参数oldSomeObject应该是最终的
参数newSomeObject应该是最终的
当我转换这两个参数时:
public SomeObject someObjectBehavior(final SomeObject oldSomeObject,
final SomeObject newSomeObject) {
if(oldSomeObject == null) {
oldSomeObject = newSomeObject; //Assignment operation
}
}
因此,现在无法进行赋值操作,Java代码中存在错误
无法分配最终的局部变量oldSomeObject。它必须为空白且不使用复合赋值。
如果你们中的任何一个人遇到过这种情况,那么请帮忙,因为我正试图解决所有的Checkstyle问题。
谢谢
此致
Ankur Sharma
答案 0 :(得分:6)
重新分配参数被认为是不好的风格。你应该创建一个新的局部变量。
答案 1 :(得分:4)
您提供的示例方法
public SomeObject someObjectBehavior(final SomeObject oldSomeObject,final SomeObject newSomeObject) {
if(oldSomeObject == null) {
oldSomeObject = newSomeObject; //Assignment operation
}
}
是为什么让参数final
成为好主意的完美示例。在不设置变量final
的情况下,您可能没有意识到您的方法什么都不做,因为重新分配参数引用不会改变方法之外的任何内容。
答案 2 :(得分:3)
将参数定义为final的主要原因是为了避免以后无意中覆盖它们。如果你最终定义它们,你总是可以确保参数始终是首先给出的方法。
如果要更改值,使用新的局部变量是更好的样式。在许多情况下,只分配一次变量会使代码更具可读性。它并非总是可能,但往往是可能的。
尝试类似
的内容Object realObject;
if (oldSomeObject != null) {
realObject = oldSomeObject;
} else {
realObject = newSomeObject;
}
答案 3 :(得分:-2)
此检查样式规则是首先拍摄(必须是最终决定,否则是错误的)并随后询问问题(实际上会发生重新分配)的完美示例。