假设我有一个参数为Object
类型的方法。
该方法不返回任何内容 - void
。
首先,它检查参数是否为空(或任何其他检查,如objectParam.isEnabled()
)
if (objectParam.isEnabled()) {
// ok
}
现在,如果满足条件,我需要局部变量。如果不是,那么我不需要任何变量。
我应该在哪里定义它们?在“if scope”里面或者在方法标题之后?
当然,我可以随时随地进行,但哪种方式应该是更好的做法?
答案 0 :(得分:13)
我认为最好的做法是尽可能晚地声明一个变量,在最紧密嵌套的范围内,理想情况下,它可以用一个有用的值进行初始化。
这使得它在何处以及如何使用时更加清晰 - 当您查看使用它的代码时,您不必查看很远就能看到声明。
在这个特殊情况下,我不同意官方的Java风格指南 - Josh Bloch也是如此。来自Effective Java,第2版,第45项:
最小化局部变量范围的最有效方法是将其声明为首次使用的位置。
因此,如果在执行其他一些语句之前不需要变量,那么在此之前不要声明它。
答案 1 :(得分:1)
答案 2 :(得分:1)
您应该在使用它们的最窄范围内初始化它们,所以在这种情况下在if
块内。
void foo(Object obj){
if (obj != null) {
int a = 0;
...
}
}
如果它们不会在这个块之外的任何地方使用,那么就不需要混淆方法,并且将代码的读者与在其所需范围之外声明的额外变量混淆。