当在方法参数上使用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参数上使用了关键字,则该错误将在编译时捕获。