Bie*_*aja 4 java static constructor final
我基本上想要的是:
public class Test
{
private static final Integer a;
public Test(Integer a)
{
this.a = a;
}
Run Code Online (Sandbox Code Playgroud)
}
这显然不起作用,导致第二个创建的实例将尝试覆盖最终变量.那么有没有办法通过构造函数给所有实例提供相同的不可变值?
tro*_*ers 11
静态最终值应该在静态上下文中初始化,而不是由实例初始化.
一个选项是在声明中设置值:
private static final Integer a=FileConfig.getInstance().getA();
Run Code Online (Sandbox Code Playgroud)
每个类都可以有一个static {}块,其中调用代码来初始化类的静态部分.
static {
a = FileConfig.getInstance().getA();
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以从静态方法设置值
private static int getA() {
return FileConfig.getInstance().getA();
}
private static final Integer a=getA();
Run Code Online (Sandbox Code Playgroud)
在闭包中,静态实例初始化不属于实例构造函数.
如果配置值有时发生变化,则根本没有理由将值a存储在静态最终变量中.如果要在构造函数中使用常量a创建每个实例,那么首先静态字段的目的是什么?不知何故,当你第一次调用构造函数时,你从某个地方传入一个值.如果值值得为静态和最终值,则可以从静态初始值设定项中获取值.如果配置不是单例,但每个实例总是产生相同的a值,则可以轻松完成a = new FileConfig().getA();
.
除此之外,你可以使值非最终,并且放心,因为你总是输入相同的值a
,静态变量不会改变.
仍然,您可以创建类a
的最终实例变量,在构造函数中设置.
归档时间: |
|
查看次数: |
9801 次 |
最近记录: |