我想知道在Java中是否有办法只分配一次变量。我知道这里有final关键字,但我想获得相同的结果而不必在构造函数中设置值。 我想在构造函数之外设置它,因为我还不知道该值。
答案 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;
}
}
寻找自定义不可变对象时,还可以使用泛型使其在值类型范围内更灵活。