最近看一些apache的开源代码,经常发现如下写法
public long getLong([color=red]final String str, final long val[/color]) {
try {
return getLong(str);
} catch (FtpException ex) {
return val;
}
}
为何要把方法中的参数都定义成final类型的呢?
目的是不允许将引用变量进行重定向
我觉得这个应该算是编程习惯问题。
预期认为某个局部变量不需要,或不可以改变,则将其设置为 final 。这样如果发生改变可以在编译期间发现。或者是方法的声明者和实现者不是同一个人,而声明者认为这些局部变量不应该发生改变。
其实我接触到的将局部变量设置为 final 的目的比较明确的是:该变量需要在局部内部类中进行使用,此时是需要强制使用 final 。目的就是确保这些局部变量不被修改,因为这些在局部内部类中所使用的局部变量如果可以修改,那么修改后将与实际语义产生矛盾。至于其它情况的局部 final 变量,并能对系统的运行带来好处..