27. 可變性最小化 2/2
作法:
1. 不提供 mutator
2. final class
3. final field
4. private field
5. 確保可變組件無法被使用(access)
a. 必要時須用 defensive copy
28. 兩種 Member class
A a = new A();
B b = a.new B(); // 需要 a
C c = new C();
A 是 enclosing classclass A {
class B {
...
}
static class C {
...
}
...
}
b 需要 a 的狀態
c 不需要 a 的狀態
29. 隱含的 reference
class A {
class B {
...
}
}
class Client {
void main() {
A a = new A();
B b = a.new B();
a = null;
...
System.gc();
...
}
}
原本 a 指向的 instance 不會被回收!
B 為 nonstatic,b 隱含 a 的 reference。