Cou氏の徒然日記

ほのぼの日記ブログです。

Java の学習 (無名クラス(匿名クラス))

Java

今回はJava SE 8」で導入されて、Javaが変わった大きな機能であるラムダ式について。

 

ラムダ式」が導入されたことで、Javaのソースの書き方が大きく変わり、既存の知識だと理解できなくなった…というのがありますね。

そして、「ラムダ式」を理解するためには、「関数型インターフェース」「無名クラス(匿名クラス)」を理解しないといけないみたいです。

 

正直、interfaceってあまり重要性を感じていなかったんですが、今はかなり考え方が変わっているんですね。(もともと変わっていないのかもしれませんが)

 

◆ 無名クラス (匿名クラス)

処理を実装するに当たり、interfaceが定められていて、そのinterfaceにしたがって処理を作りたいという場合もありますが、interfaceはインスタンスとして作成できないので、そのinterfaceを実装したクラスを用意する必要があります。

通常、interfaceをimplimentsしたクラスを定義して、その中にクラス変数やメソッドを定義して…ということをやりますが、あるケースでだけ使うという場合には、わざわざそのためだけにクラスを作るということは無駄になります。

そういう場合に便利なのが、「無名クラス(匿名クラス)」となります。

 

まず interfaceを定義。

今回は、文字列(String)を渡したら、それを表示するというメソッドを定義したインタフェースを作成。

◆ IPrintOut.java (インタフェース)
public interface IPrintOut {
  void print(String str);
}
◆ 実装クラス
  IPrintOut ipo = new IPrintOut() {
     @Override  
     public void print(String str){
         System.out.println("Call IPrintOut.print(). :" + str);
     }
  };
  ipo.print("test!");

続いて、そのインタフェースを実装した無名クラスを実装。

具体的には、インタフェース(IPrintOut)で示された print (String str) メソッドをOverrideして実装します。

今回はわかりやすくするために、”Call IPrintOut.print(). : <文字列>" という標準出力をするメソッドを実装

 

あとは、これを呼び出してみると…

 Call IPrintout.print(). :test!

とコンソールに表示され、「無名クラス」で実装した printメソッドが呼ばれて実行されていることがわかります。

わかればそれほどって感じですね。