最佳实践:Java静态非最终变量

Jam*_*tel 23 java static

在Java中,什么时候应该使用静态非最终变量?

例如

private static int MY_VAR = 0;
Run Code Online (Sandbox Code Playgroud)

显然我们不是在谈论常数.

public static final int MY_CONSTANT = 1;
Run Code Online (Sandbox Code Playgroud)

根据我的经验,我经常在使用单身时证明他们是合理的,但后来我最终需要有一个以上的实例并导致自己非常头疼并重新考虑因素.

它们似乎很少应该在实践中使用.你怎么看?

Jon*_*eet 21

统计信息收集可能使用非最终变量,例如计算创建的实例数.另一方面,对于那种情况,你可能还是想要使用AtomicLong等等,此时它可能是最终的.或者,如果您正在收集多个统计信息,则最终可能会得到一个Statistics类以及对其实例的最终引用.

拥有(合理地)非最终静态变量肯定是非常罕见的.


Tom*_*ine 6

当用作缓存时,记录,统计或调试开关是显而易见的合理用途.当然,都是私人的.

如果您将可变对象分配给最终字段,那么在道德上与拥有可变字段相同.

有些语言,如Fan,完全不允许使用可变静态(或等效的).