为什么在Java的方法参数上使用关键字“ final”?
当在方法参数上使用final
关键字时,我无法理解该关键字在哪里真正方便。
如果我们排除使用匿名类,可读性和意图声明,那么对我来说几乎毫无用处。
强制某些数据保持不变并不像看起来那样强大。
- 如果参数是原始参数,则它将无效,因为参数作为值传递给方法,并且在范围之外进行更改将无效。
- 如果我们通过引用传递参数,则引用本身就是一个局部变量,并且如果在方法内部更改了引用,则不会在方法范围之外产生任何影响。
考虑下面的简单测试示例。尽管该方法更改了给定给定值的参考值,但该测试通过了,但没有效果。
public void testNullify() { Collection<Integer> c = new ArrayList<Integer>();
nullify(c);
assertNotNull(c);
final Collection<Integer> c1 = c;
assertTrue(c1.equals(c));
change(c);
assertTrue(c1.equals(c));
}
private void change(Collection<Integer> c) {
c = new ArrayList<Integer>();
}
public void nullify(Collection<?> t) {
t = null;
}
回答:
有时,明确(出于可读性)变量不会更改是很好的。这是一个简单的示例,使用final
可以节省一些麻烦:
public void setTest(String test) { test = test;
}
如果你忘记了设置器上的’this’关键字,那么你想要设置的变量就不会设置。但是,如果你在final
参数上使用了关键字,则该错误将在编译时捕获。
以上是 为什么在Java的方法参数上使用关键字“ final”? 的全部内容, 来源链接: utcz.com/qa/419533.html