📘

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