Java / 基礎 / クラス / 無名クラス

Java / 基礎 / クラス / 無名クラス

バージョンと製造年月日

  • 2010-04-20
  • Java1.5

Javaの無名クラス

クラスという名前がついているが、これはロジックをメタプログラムするような動きのために無理やり導入した例外的文法で、JavaScript とかでいう

function hoge(a){
    return a();
}
hoge((function(){ return 1; }));

このような実装がしたいがために生み出されたと思われる。 無名クラスはJavaでは内部クラスと似たような挙動を見せる。

書き方

hoge(new Piyo(){
    public void fuga(){
        //何か処理
    }
});

このように書く無名クラスなのにPiyoという名前がついているのは、このPiyoクラスを継承して作るという意味だ。

スコープ

↑のfugaメソッド内はhogeメソッドが使われているどこかのメソッド内とはスコープがちょっと違う。

  • thisは無名クラスのインスタンスを指す
  • hogeメソッドが使われているメソッド内のローカル変数はfinal宣言をすれば同一名称でfugaメソッド内でも使える。ただしかぶったらローカル変数優先
  • fugaメソッド内でhogeメソッドが使われているメソッドがあるインスタンスメソッドを呼び出せる・・・thisは無名クラスなのでthis無し呼出
  • fugaメソッド内でhogeメソッドが使われているメソッドがあるインスタンスのメンバ変数を呼び出せる・・・thisは無名クラスなのでthis無し

Tag

java/basic/class/no_name_class.txt · 最終更新: 2020-12-18 12:59 by ore