是否可以只定义一次变量而不使用final

时间:2019-05-19 11:08:12

标签: java variables final

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

2 个答案:

答案 0 :(得分:5)

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

Object key;


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

答案 1 :(得分:0)

除了使用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;
    }
}

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