**允許匿名內部類別 / Lambda 存取該變數**。Java 規定:匿名類別只能存取 **final 或 effectively final (實際上不再變更)** 的區域變數/參數。
class,無法直接存取外部方法的堆疊框架變數。final 保證變數指向不變,複製安全。public void test() {
final String prefix = "LOG: "; // 必須 final 或 effectively final
Runnable r = () -> System.out.println(prefix + "done"); // 捕獲 prefix
new Thread(r).start();
}
| 類型 | 定義位置 | 典型用途 |
|---|---|---|
| 成員內部類 | 類別內、方法外 | 需存取外部類私有欄位、邏輯強相關 (如 Map.Entry) |
| 靜態巢狀類 | 類別內、方法外 + static | 不需外部實例、工具類、Builder 模式 |
| 區域內部類 | 方法內 | 實作介面一次性邏輯、封裝演算法細節 |
| 匿名類別 | 方法內、表達式中 | 事件監聽、Runnable、Comparator 等一次性實作 |
public void sortByLength(List list) {
list.sort(new Comparator() {
@Override public int compare(String a, String b) {
return a.length() - b.length();
}
});
}