16

我和有效的java有一个小冲突。一方面,它强烈鼓励使用 final 修饰符。它还鼓励使用 foreach 循环。

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

for (final element e : list) {
  // do whatever.
}

如果元素预计不会改变,那么使用 final 似乎很好。为什么不那么常见?

4

4 回答 4

8

通常开发人员会保留默认设置,只在需要时添加代码。即,编写最短的代码更容易。想想一个演讲厅,如果你做某事,他们会要求你举手,如果你不做,他们会要求你举手,大约一半的房间根本不会投票。

恕我直言,默认值应该是最终的,并且您将有一个var可以更改的值的关键字。这样更多的字段将是最终的。

在这种特殊情况下,我不会将局部变量设为 final,因为方法应该足够短,以便您可以推断变量是否已更改。如果您无法轻松解决此问题,则说明您的循环/方法太复杂了。

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

于 2013-08-10T08:58:25.683 回答
6

它没有被使用,因为它的“代码噪音”。

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

于 2013-08-10T08:56:44.750 回答
3

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

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

还有另一种惯例是在 80 个字符后中断代码行。这个声明甚至还没有缩进(它必须在一个类中)并且它已经比那个数量长了。Java 是一种非常冗长的语言,没有必要让你的代码更加混乱;特别是因为没有任何东西可以使局部变量成为最终变量。

于 2013-08-10T09:05:16.350 回答
0

基本上,该元素将在 for 循环范围内是最终的。在那里没有太多收获。

于 2013-08-10T08:57:03.157 回答