Java 是否可以只定义一次变量而不使用final
我想知道在Java中是否有一种方法可以只分配一次变量。我知道有最后一个关键字,但我希望在不必在构造函数中设置值的情况下获得相同的结果。Java 是否可以只定义一次变量而不使用final,java,variables,final,Java,Variables,Final,我想知道在Java中是否有一种方法可以只分配一次变量。我知道有最后一个关键字,但我希望在不必在构造函数中设置值的情况下获得相同的结果。 我想在构造函数之外设置它,因为我还不知道该值。您可能需要在分配值之前检查键,例如: Object key; public void setValue(Object value) { if (key != null) { // ignore or throw exception, depending on your business l
我想在构造函数之外设置它,因为我还不知道该值。您可能需要在分配值之前检查键,例如:
Object key;
public void setValue(Object value) {
if (key != null) {
// ignore or throw exception, depending on your business logic
} else {
key = value;
}
}
除了使用finalkeyword,没有真正的方法 您必须实现一个自定义设置器,该设置器检查值是否已设置:
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;
}
}
在选择自定义不可变对象时,还可以使用泛型使其在值类型的范围内更灵活。只需分配一次,即可分配一次。如果您违反了自己的意图,final只会给您一个编译时错误。因此,如果没有任何其他信息说明你为什么认为有必要,我只能接受你没有保护。在安装复杂的执行机制之前,我肯定会采取这种方法。自然,该字段将被标记为私有。