为什么要在Java的方法参数中使用关键字“final”?

问题:

当方法参数使用时,我无法理解final关键字在哪里really方便。
如果我们排除使用匿名类,可读性和意图声明,那么对我来说似乎几乎没有价值。
强制某些数据保持不变并不像看起来那么强大。

  • 如果参数是一个原语,那么它将没有任何效果,因为该参数作为一个值传递给方法,并且更改它将不在作用域之外。
  • 如果我们通过引用传递一个参数,那么引用本身就是一个局部变量,如果引用在方法中被改变,那么这个参数从方法范围之外就没有任何效果。

考虑下面简单的测试例子。
该测试通过虽然该方法改变了给定的参考值,但它没有效果。

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;
}

如果您在setter上忘记了’this’关键字,则您设置的变量不会被设置。但是,如果您对参数使用final关键字,那么在编译时将会捕获该错误。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Why should I use the keyword “final” on a method parameter in Java?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

98 − = 93