gpt4 book ai didi

java - 在构造函数中设置静态最终变量

转载 作者:搜寻专家 更新时间:2023-11-01 01:13:41 24 4
gpt4 key购买 nike

我基本上想要的是:

public class Test 
{
private static final Integer a;

public Test(Integer a)
{
this.a = a;
}

这显然是行不通的,因为第二个创建的实例会尝试覆盖最终变量。那么有没有办法通过构造函数为所有实例赋予相同的不可变值?

最佳答案

静态最终值应该在静态上下文中初始化,而不是由实例初始化。

一种选择是在声明中设置值:

private static final Integer a=FileConfig.getInstance().getA();

每个类都可以有一个静态 {} block ,其中调用代码来初始化类的静态部分。

static {
a = FileConfig.getInstance().getA();
}

最后,您可以通过静态方法设置值

private static int getA() {
return FileConfig.getInstance().getA();
}

private static final Integer a=getA();

在闭包中,静态实例初始化不属于实例构造函数。

如果配置值有时会发生变化,则根本没有理由将值 a 存储在静态最终变量中。如果你想在构造函数中用常量 a 创建每个实例,首先静态字段的目的是什么?不知何故,当您第一次调用构造函数时,您是从某处 传递一个值。如果该值应该是静态的和最终的,您可以从静态初始值设定项中获取它。如果配置不是单例,但每个实例总是产生相同的 a 值,您可以轻松地执行 a = new FileConfig().getA();

除此之外,您可以将值设置为非最终值,并且请放心,因为您总是输入相同的 a 值,所以静态变量不会改变。

不过,您可以使 a 成为类的最终实例变量,在构造函数中设置。

关于java - 在构造函数中设置静态最终变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040662/

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