Определение неизменяемости гласит, что состояние объекта (его данных) не может быть изменено после построения.
Здесь возникает вопрос, по моему мнению, состояние и данные, которые содержит объект, - это разные вещи.Может быть, состояние означает данные, которые предоставляются через геттеры?
Это не означает, что данные помечены как закрытые и не видны внешнему миру, которые действительно могут изменять и не изменять состояние объекта.
Скажите, если это правильно:
final class Obj1 {
private final int i;
private final Random rnd = new Random();
private int j = rnd.nextInt(1000);
public Obj1(int i) {
this.i = i;
}
public getI() {
j = rnd.nextInt(1000);
return i;
}
}
Экземпляр Obj1
является неизменным объектом.
final class Obj2 {
private final int i;
private final Random rnd = new Random();
private int j = rnd.nextInt(1000);
public Obj1(int i) {
this.i = i;
}
public getI() {
return i;
}
public getJ() {
return j;
}
}
Является ли экземпляр Obj2
изменяемым или неизменным объектоми почему?Что если мы получим следующий объект Random в теле getJ каждый раз, когда вызывается геттер?
А что насчет такого класса?Изменчивый / неизменный и почему?
final class Obj3 {
private final Random rnd = new Random();
private int j = rnd.nextInt(1000);
public Obj1() {
}
public getJ() {
return j;
}
}
А как насчет этого?Изменчивый / неизменный и почему?
final class Obj4 {
private final Random rnd = new Random();
public Obj1() {
}
public getRnd() {
return rnd.nextInt(1000);
}
}