クロージャは Java で言うところのメソッドをひとつしか定義していない無名内部クラス

…というたとえを Groovy の解説などで見かけるのですが、どうもピンときません。クロージャではなくて、プロトタイプベースのオブジェクトは、とかいうなら分かるのですが…。

class inner {
   public static void main(String[] args]) {
      System.out.println*1;
            }
         }
      }).factorial(10);
   }
}

むぅ。どうひねってもクロージャに見えない…。orz

class blocky {
   public static void main(String[] args) {
      System.out.println*2;
            }
         }
      }).value(10));
   }
}

むっ。こうすると、ちょっとクロージャっぽくみえなくなくもない。

追記

クロージャは、Javaにおいての(無名の)メソッド一つだけをもった無名内部クラスのようなものだと考えると良いでしょう。

おお。Java は無名のメソッドなんてものも持てるのですか…。それなら分かるような気も。ん。でも無名メソッドってったらまんま無名関数でわ? もうわけわか。orz

*1:new Object() { private int factorial(int n) { if (n == 0) { return(1); } else { return(n * factorial(n - 1

*2:new Object() { public int value(int n) { if (n == 0) { return(1); } else { return(n * this.value(n - 1