Мне нужен класс, в котором я могу создавать экземпляры с одной переменной unset (id
), а затем инициализировать эту переменную позже и иметь неизменяемый после инициализации. Фактически, мне нужна переменная final
, которую я могу инициализировать вне конструктора.
В настоящее время я импровизирую это с установщиком, который выбрасывает Exception
следующим образом:
public class Example {
private long id = 0;
// Constructors and other variables and methods deleted for clarity
public long getId() {
return id;
}
public void setId(long id) throws Exception {
if ( this.id == 0 ) {
this.id = id;
} else {
throw new Exception("Can't change id once set");
}
}
}
Является ли это хорошим способом заниматься тем, что я пытаюсь сделать? Я чувствую, что должен быть способен установить что-то неизменное после его инициализации или что есть образец, который я могу использовать, чтобы сделать его более элегантным.