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

2022-09-01 20:55:02

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

例如

private static int MY_VAR = 0;

显然,我们在这里不是在谈论常量。

public static final int MY_CONSTANT = 1;

根据我的经验,我经常在使用单例时证明它们是合理的,但是我最终需要有多个实例,并给自己带来极大的头痛和重构。

在实践中使用它们似乎很少见。你觉得怎么样?


答案 1

统计信息收集可能使用非最终变量,例如,计算创建的实例数。另一方面,对于这种情况,您可能无论如何都想使用等,此时它可以是最终的。或者,如果您要收集多个统计信息,则最终可能会得到一个类和对其实例的最终引用。AtomicLongStatistics

当然,拥有(合理的)非最终静态变量是非常罕见的。


答案 2

当用作缓存时,日志记录,统计信息或调试开关是明显的合理用途。当然,都是私人的。

如果将可变对象分配给最终字段,则在道德上与具有可变字段相同。

某些语言(如 Fan)完全不允许可变静态(或等效)。


推荐