今日のjavaおっかけ(20150420):ラムダ式 2

匿名クラス便利じゃないか!!

目次とぶっつぶつテーマ

http://snoopopo.hatenablog.com/entry/2015/04/14/102732

今日のテーマ:ラムダ式のメリットを知る前提知識をつける 2

・関数型インタフェースの実装の記述の簡素化

ラムダ式を使ったJava8での新機能(streamAPIとか?)

( http://snoopopo.hatenablog.com/entry/2015/04/17/115424 )

前回↑より引き続き、まずは記述が簡素になったことを取り上げてく.

ラムダ式を使う前の書き方 匿名クラス

Javaラムダ式メモ(Hishidama's Java8 Lambda Expression Memo)

上記のサイトに上げられている例を見てみる.

Runnable runner = new Runnable() {
    @Override
    public void run() {
        System.out.println("example");
    }
};
runner.run();

たとえば、スレッドの実装で使われる java.lang.Runnableインタフェースは、関数型インタフェースだ。

↑の書き方だけど、インタフェースに対して new をしていたり見たことない書き方をしている.

これが匿名クラスというものを使用した書き方らしい。

上記はRunnableインタフェースを実装した(run()メソッドを実装した)匿名クラスのインスタンスが生成( new )されて、

実装したrunメソッドを呼んでいる例。

new Runnable() {
    @Override
    public void run() {
        System.out.println("tokumei class");

    }
}.run();

こんな↑書き方も出来ます。

これは一回だけというか、その場でだけ使う場合に匿名クラスを使うかんじかなと。

見たことない書き方だったけど個人的にはわかりやすいし、1度しか使わないクラスはこう書く方が便利だと思う。

実際にメモリ開放するタイミングなどはGCまかせなので、わからないはずだけど、 クラスを定義するよりもスコープも狭いのは確かだ。

匿名クラスは、名前を定義しないクラスなので、無名クラスとも呼ばれる。

次回は、これをラムダ式で書く方法にようやくうつります。