Java 在每个循环中使用final

Java 在每个循环中使用final,java,final,Java,Final,我与有效的java有一点冲突。一方面,它强烈鼓励使用最终修饰语。它还鼓励使用foreach循环 但是,我在任何地方都没有看到任何代码,这些代码如下: for (final element e : list) { // do whatever. } 若元素预计不会更改,那个么使用final似乎是好的。为什么它不那么常见?因为它的“代码噪音”而不被使用 final关键字应该用于所有方法参数等,但它不是,因为虽然更“正确”,但可读性较差。基本上,元素在for循环的范围内是final的。这方面没有

我与有效的java有一点冲突。一方面,它强烈鼓励使用最终修饰语。它还鼓励使用foreach循环

但是,我在任何地方都没有看到任何代码,这些代码如下:

for (final element e : list) {
  // do whatever.
}
若元素预计不会更改,那个么使用final似乎是好的。为什么它不那么常见?

因为它的“代码噪音”而不被使用


final关键字应该用于所有方法参数等,但它不是,因为虽然更“正确”,但可读性较差。

基本上,元素在for循环的范围内是final的。这方面没有太多收获。

开发人员通常会保留默认值,只在需要时添加代码。i、 最短的代码更容易编写。想象一下一个演讲厅,如果你做了什么,他们会要求你举手,如果你不举手,大约一半的人根本不会投票

IMHO默认值应该是最终值,对于可以更改的值,您将有一个关键字
var
。这样更多的领域将是最终的

在这个特殊的例子中,我没有将局部变量设置为final,因为方法应该足够短,您可以推断变量是否更改。如果你不能很容易地解决这个问题,那么你的循环/方法就太复杂了


然而,对于字段,我确实建议尽可能地将这些字段设置为final,尤其是如果它们不是私有的,因为阅读所有可能使用它的代码并不容易。

有很多地方可以放置final关键字,有人说应该放置final关键字。一个常见的例子是方法参数。请看以下代码片段:

public static long pow_mod(final long base, final long exponent, final long mod) {
    // body
}

还有另一个惯例是在80个字符后断开代码行。这个声明甚至还没有缩进(它必须在一个类中),并且已经超过了这个数量。Java是一种非常冗长的语言,没有必要让代码更加混乱;特别是因为将局部变量作为最终变量没有什么好处。

我一直在使用它。其他人不使用它,因为他们说它“弄乱了代码”。这种类型的循环称为“增强for循环”。我也一直在使用它。但我倾向于同意这两个阵营。如果确实不希望重新分配引用,请使用
final
,句号。但事实上,它确实会把代码弄得乱七八糟。我见过大量代码以良好的方式编写,但不幸的是看起来过于冗长。不幸的是,没有一个简单的方法可以让两个阵营都满意,当然,除非你已经准备好搬到斯卡拉……;)它在
可运行的情况下非常有用,并且有助于防止由于覆盖错误的变量而导致的逻辑错误。特别是在“for each”循环中使用“final”变量作为访问可在不同线程中同时写入的集合的键的情况下。