Нет реального способа, кроме как использовать ключевое слово final
.
Вы также должны реализовать пользовательский установщик, который проверяет, было ли уже установлено значение:
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;
}
}
При переходе к пользовательскому неизменяемому объекту вы также можете использовать универсальные шаблоны, чтобы сделать его более гибким в отношении типа значения.