为什么不能将所有函数参数声明为final?

Vla*_*lie 7 java oop pmd

好的,所以我理解为什么我们应该从这个问题宣布论证是最终的,但我不明白为什么我们不应该...

由于Java总是使用pass by value,这意味着我们不能通过给定的参数返回一个新值,我们只能覆盖它,并使参数无用,因为我们不使用传递的值...

Java中非最终方法参数的唯一好处是您不必创建参数类型的局部变量吗?

PS这个问题是由... PMD的规则引发的MethodArgumentCouldBeFinal

Jof*_*rey 4

我只能想到创建参数的两个原因final

  1. 如果您需要在某些边缘情况下覆盖参数的值(例如,如果参数为 null 等,则设置默认值),可以节省局部变量的使用。但是,我不认为这通常是一个好的做法。

  2. 每个参数保存 6 个字符,从而提高可读性。

原因2是导致我大多数时候不写它的原因。如果您假设人们遵循从不为参数分配新值的做法,则可以将所有参数视为隐式参数final。当然,编译器不会阻止您分配参数,但考虑到可读性的提高,我可以接受这一点。

  • 如果所有变量默认都是final的,并且需要一个额外的词来使它们可变,那么Java会更好 (3认同)