我想知道非空白/初始化的不可变最终字段是否有合法的用例。
换句话说:
class Foo {
private final String bar = "bar";
}
Versus
class Foo {
private static final String BAR = "bar";
}
大多数情况下的答案是:这取决于.
做到这一点意味着什么static
?实际上,这意味着让所有实例都使用相同的值那个领域的。
大多数情况下,不可变对象可以在所有实例之间共享,不会出现任何问题。就像在这个例子中这说得通使其静态,因为您希望类的所有实例都使用相同的value那个领域的。
但我们不要忘记,即使对象是不可变的,它仍然具有可变属性,例如monitor https://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html用于同步机制。假设你的班级有
private final Object lock = new Object();
每个实例都应该使用自己的lock
用于同步的对象(例如synchronize(lock){...}
)。尽管事实上Object
是不可变的,使得lock
static 不是我们想要的(值lock
不应该共享,但是separate对于每个实例)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)