是否可以在不使用 final 的情况下只定义一次变量

Is it possible to define a variable only once without using final

我想知道在 Java 中是否有办法只为一个变量赋值一次。我知道有 final 关键字,但我想获得相同的结果而不必在构造函数中设置值。 我想在构造函数之外设置它,因为我还不知道它的值。

您可能需要在分配值之前检查密钥,例如:

Object key;


public void setValue(Object value) {
    if (key != null) {
        // ignore or throw exception, depending on your business logic
    } else {
        key = value;
    } 
}

除了使用 final 关键字外没有真正的方法。

您要么必须实施自定义 setter,它会检查是否已设置该值:

public boolean setValue(Object value){
    if( this.value == null){
        this.value = value;
        return true;
    }
    return false;
}

或者您使用不可变对象,它包装了上述行为。有不同的库,提供不可变对象,或者你自己写一个:

// Constructor based only allows to set the value when constructing the object
public class Immutable{
    private Object value;

    public Immutable(Object value){
        this.value = value;
    }

    public Object getValue(){
        return this.value;
    }
}

// Setter based provides a setValue method which checks, if the value is already set or not
public class Immutable{
    private Object value;

    public boolean setValue(Object value){
        if( this.value == null){
            this.value = value;
            return true;
        }
        return false;
    }

    public Object getValue(){
        return this.value;
    }
}

在使用自定义不可变对象时,您还可以使用泛型使其在值类型的范围内更加灵活。