可變性最小化 2/2
作法:
1. 不提供mutator
2. final class
3. final field
4. private field
5. 確保可變組件無法被使用(access)
a. 必要時須用 defensive copy
28.
兩種 Member class
Aa = 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。