假设我通过传递一个对象来调用方法.
public String retrieveXyz(Criteria criteria){
//get some info out of criteria and do something.
}
Run Code Online (Sandbox Code Playgroud)
最好使条件成为最终,以便此处理程序不能用于定位除传递的其他对象或其开销之外的其他对象,因为这不会保护对象状态不被更改.
public String retrieveXyz(final Criteria criteria){
//get some info out of criteria and do something.
}
Run Code Online (Sandbox Code Playgroud)
如果将方法参数标记为final,则无法在方法范围内修改参数的值:
public void xyz(final String parameter) {
parameter = "..." //compiler error!
}
Run Code Online (Sandbox Code Playgroud)
理解值parameter是对传递给方法的对象的引用,而不是对象本身的值.
通过将方法参数标记为final,编译器将在编译时抛出错误.这提醒您不要在方法中修改参数的值.
如果参数的值可以更改为引用另一个对象,则可能无法立即清楚在方法体内的任何给定点处引用了哪个对象.
考虑以下:
public void xyz(String parameter) {
//Complicated logic that might span 20-30 lines.
parameter = "Joe";
//More complicated logic that might span a few lines.
//New logic being added that needs reference to the value of the parameter.
}
Run Code Online (Sandbox Code Playgroud)
在如上所述的复杂方法中,程序员可能难以识别哪些对象parameter引用.此外,如果程序员需要引用parameter他不再拥有一个.