gpt4 book ai didi

java - 不可变的已初始化最终字段是否应始终设为静态?

转载 作者:搜寻专家 更新时间:2023-11-01 01:40:12 25 4
gpt4 key购买 nike

我想知道是否会有非空白/已初始化的不可变最终字段的合法用例。

换句话说:

class Foo {
private final String bar = "bar";
}

对比

class Foo {
private static final String BAR = "bar";
}

最佳答案

在大多数情况下,答案是:视情况而定

让它static是什么意思?实际上,这意味着让所有实例都使用该字段的相同值

大多数情况下,不可变对象(immutable对象)可以毫无问题地在所有实例之间共享。就像在这种情况下一样,将其设为静态是有意义的,因为您希望类的所有实例都使用该字段的相同

但是不要忘记,即使对象是不可变的,它仍然具有像 monitor 这样的可变属性。用于同步机制。假设你的类(class)有

private final Object lock = new Object(); 

并且每个实例都应该使用自己的 lock 对象进行同步(如 synchronize(lock){...})。尽管 Object 是不可变的,但将 lock 设为静态并不是我们想要的(lock 的值不应共享,但 为每个实例分开)。

关于java - 不可变的已初始化最终字段是否应始终设为静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49082657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com