为什么Java方法/构造函数参数在默认情况下不是最终的?

为什么Java方法/构造函数参数在默认情况下不是最终的?,java,Java,final字段促进不变性。在我看来,这是一件好事。然而,我发现必须显式地将每个方法参数和局部变量声明为final,这看起来很嘈杂,使LOC更宽;我只希望是这样 我本以为默认情况下,方法参数和局部变量是最终的,这是一个更好的决定。为什么不是这样?Intellij允许您自定义代码生成。在“首选项->编辑器->代码样式->Java->代码生成”下。您可以单击按钮,该按钮显示将生成的参数设置为最终 这里有一个官方答案:默认情况下,final对于字段和参数来说都是一个更好的选择,但是那艘船在1995年航行

final
字段促进不变性。在我看来,这是一件好事。然而,我发现必须显式地将每个方法参数和局部变量声明为final,这看起来很嘈杂,使LOC更宽;我只希望是这样


我本以为默认情况下,方法参数和局部变量是
最终的
,这是一个更好的决定。为什么不是这样?

Intellij允许您自定义代码生成。在“首选项->编辑器->代码样式->Java->代码生成”下。您可以单击按钮,该按钮显示
将生成的参数设置为最终

这里有一个官方答案:默认情况下,final对于字段和参数来说都是一个更好的选择,但是那艘船在1995年航行,在马逃跑后尝试锁上谷仓门的价值相对较小。正如@PeterLawrey所建议的,尽管避免参数突变是一件好事,但让它们成为最终参数的语法开销很少值得(事实上,在Java8中,编译器在一些以前需要显式最终性的情况下推断最终性,例如由内部类捕获)

这里不是一个问题。你能举一些例子吗?“在我的经验中,好的java开发者喜欢最终的参数”。虽然如果变量是最终的默认情况下,它可能会更好,但我不认为他们添加它们除了字段之外真的有帮助。如果您的方法过于复杂,无法确定变量是否为最终变量,则您的方法过于复杂,即重构方法,而不是将最终变量添加到变量中。下面是一个官方答案:默认情况下,对于字段和参数,最终值都是一个更好的选择,但那艘船在1995年开航,在马逃跑后试图锁上牲口棚门的价值相对较小。正如@PeterLawrey所建议的,尽管避免参数突变是一件好事,但让它们成为最终参数的语法开销却很少值得(事实上,在Java 8中,编译器在某些以前需要显式最终性的情况下推断最终性,例如由内部类捕获)。这才是真正的澄清。谢谢你,谢谢@steffen。很遗憾,这个问题不太适合堆栈溢出,因为我觉得这是一个有趣的问题,它的答案将帮助开发人员编写更好的代码。这个问题是针对参数的,而不是局部变量。更新。这是它旁边的选项。真的不需要否决票。严酷的人群。试图回答问题中容易回答的部分。我不能回答反对票。我没有。我以前总是ping用户。因为你更新了它,以反映我从来没有这样做过。现在我可以猜出为什么会有人投反对票了:这并不能回答这个问题。“作为最后一个,然而,看起来吵闹,使签名更长”我也没有否决你的答案,即使我不同意你的原始文本。最终确定方法参数对(im)可变性没有影响;对象仍然可以修改。在并发性方面声明方法参数
final
有什么不同?