final
在下面的代码之间有什么不同。将参数声明为final
有什么好处吗?
public String changeTimezone( Timestamp stamp, Timezone fTz, Timezone toTz){
return ....
}
public String changeTimezone(final Timestamp stamp, final Timezone fTz,
final Timezone toTz){
return ....
}
发布于 2010-11-12 16:13:54
由于形式化方法参数是局部变量,因此只有当它们被声明为final时,才能从内部匿名类访问它们。
这使您不必在方法体中声明另一个局部final变量:
void m(final int param) {
new Thread(new Runnable() {
public void run() {
System.err.println(param);
}
}).start();
}
发布于 2010-11-12 15:45:18
final可以防止您为变量赋值,这对捕获输入错误很有帮助。在样式上,您可能希望保持接收到的参数不变,并仅将其分配给局部变量,因此最终将有助于强制执行该样式。
必须承认,我很少记得使用final作为参数,也许我应该这样做。
public int example(final int basicRate){
int discountRate;
discountRate = basicRate - 10;
// ... lots of code here
if ( isGoldCustomer ) {
basicRate--; // typo, we intended to say discountRate--, final catches this
}
// ... more code here
return discountRate;
}
发布于 2010-11-12 15:43:51
这并没有太大的不同。这只意味着你不能写:
stamp = null;
fTz = new ...;
但是你仍然可以这样写:
stamp.setXXX(...);
fTz.setXXX(...);
这主要是对跟随您的维护程序员的一个提示,您不会在方法中间的某个地方为参数赋一个新值,因为它不明显,因此可能会导致混淆。
https://stackoverflow.com/questions/4162531
复制相似问题