我想知道是否会有非空/初始化不可变最终字段的合法用例.
换一种说法:
class Foo {
private final String bar = "bar";
}
Run Code Online (Sandbox Code Playgroud)
与
class Foo {
private static final String BAR = "bar";
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,答案是:它取决于.
制作它意味着什么static?实际上,它意味着让所有实例使用该字段的相同值.
大多数情况下,不可变对象可以在所有实例之间共享而没有问题.就像在这种情况下一样,将它设置为静态是有意义的,因为您希望类的所有实例都使用该字段的相同值.
但是不要忘记,即使对象是不可变的,它仍然具有可变属性,就像monitor在同步机制中使用它一样.让我们说你的班级有
private final Object lock = new Object();
Run Code Online (Sandbox Code Playgroud)
并且每个实例都应该使用自己的lock对象进行同步(例如synchronize(lock){...}).尽管事实Object是不可变的,但lock静态不是我们想要的(lock不应该共享值,而是为每个实例分开).
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |