是否可以在不使用 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;
}
}
在使用自定义不可变对象时,您还可以使用泛型使其在值类型的范围内更加灵活。
我想知道在 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;
}
}
在使用自定义不可变对象时,您还可以使用泛型使其在值类型的范围内更加灵活。