📘
Javaにおけるキャプチャリングの基礎とルール
📘 Javaにおけるキャプチャリング(Capturing)まとめ
🔍 キャプチャリングとは?
Javaでは、内部クラス(inner class) や ラムダ式(lambda) が
外側の変数やフィールドを使用することを「キャプチャリング(Capturing)」と呼ぶ。
つまり、内部のコードが外側の変数を捕まえて使うことを意味する。
💬 例
int outer_val = 10;
class Inner {
void print() {
System.out.println(outer_val); // ← 外部変数の使用 → キャプチャ発生!
}
}
🧱 キャプチャできる対象
対象 | キャプチャ可能か |
---|---|
外部クラスのフィールド | ✅ 可能 |
メソッド内のローカル変数 | ⚠️ final または 実質final の場合のみ可能 |
※「実質final」とは?
変数が一度だけ初期化され、その後値が変更されないこと
⚠️ なぜ制限があるのか?
- 内部クラスやラムダは後で実行されることがある
- しかしローカル変数はメソッド終了時に破棄される
- よって、変更されない値だけを使えるように制限されている!
✅ 一行まとめ
キャプチャリング(Capturing) = 内部クラスやラムダ式が外部の変数を使用すること
ただし、ローカル変数は final または 実質final の場合に限る
Discussion