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

为什么我要在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;}


浮云间
浏览 1172回答 3
3回答

阿晨1998

有时,显式(为了可读性)变量不会改变是很好的。这是一个简单的例子,使用final可以节省一些可能的麻烦:public&nbsp;void&nbsp;setTest(String&nbsp;test)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;test&nbsp;=&nbsp;test;}如果您忘记了setter上的'this'关键字,那么您要设置的变量不会被设置。但是,如果您在final参数上使用了关键字,则会在编译时捕获该错误。

慕码人8056858

是的,排除匿名类,可读性和意图声明它几乎一文不值。这三件事虽然毫无价值吗?我个人倾向于不使用final局部变量和参数,除非我在匿名内部类中使用变量,但我当然可以看到那些想要明确参数值本身不会改变的人的观点(甚至如果它引用的对象改变其内容)。对于那些发现增加可读性的人,我认为这是完全合理的事情。如果有人真的声称它确实以不支持的方式保持数据不变,那么你的观点将更为重要- 但我不记得看到任何此类声明。你是否建议有大量的开发人员认为final它比实际效果更好?编辑:我应该用Monty Python参考总结所有这些;&nbsp;这个问题看起来有点类似于问“罗马人为我们做过什么?”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java