【发布时间】:2011-08-08 09:06:18
【问题描述】:
不变性的定义表明对象的状态(其数据)在构造后不能更改。
这里提出了一个问题,在我看来,状态和对象包含的数据是不同的东西。 也许状态意味着通过 getter 提供的数据?
这并不意味着标记为私有且对外界不可见的数据确实可以改变而不改变对象的状态。
告诉我这是否正确:
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 的实例是可变对象还是不可变对象,为什么?如果每次调用 getter 时我们都在 getJ 的主体中获取下一个 Random 怎么办?
那么这样的课程呢?可变/不可变,为什么?
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);
}
}
【问题讨论】:
标签: java immutability