はじめての Lambda vol.3

JDK 8 で採用される予定の Lambda についていろいろ調べているんですが

今回は Virtual Extension Methods または Defender Methods と言われている?

新たな(都合の良い?)ものについて調べてみました。

インタフェースを実装する場合 JDK 7 までは全てのメソッドを実装する必要でしたよね。

JDK 8 ではデフォルト実装を定義できるらしいんです。

具体的には次のプログラムを見てください。

jp\yucchi\virtual_extension_method_1\Virtual_Extension_Method_1.java
package jp.yucchi.virtual_extension_method_1;

interface Hello {

    void sayHello();

    void sayHelloDefaulter() default {
        System.out.println("Default from interface : Hello World!"); 
    }

}

public class Virtual_Extension_Method_1 {

    public static void main(String[] args) {
        HelloImplementer helloImpl = new HelloImplementer();
        helloImpl.sayHello();
        helloImpl.sayHelloDefaulter();
    }
}

class HelloImplementer implements Hello {

    @Override
    public void sayHello() {
        System.out.println("Hello World!");
    }
    
}

今までだったら sayHelloDefalter() メソッドを HelloImplementer クラスが実装していないので

コンパイルエラーになったはずですよね。

JDK 8 ではメソッドに defalt キーワードを付けることによって

デフォルト実装されます!

実際に動かしてみました。

Virtual Extension Methods 1

ちゃんと動いてます。

もちろん、デフォルト実装されたメソッドも!

ここでちょっと疑問が・・・

デフォルト実装されたメソッドってオーラーライドできるの?

コードを次のように変更しました。

 

jp\yucchi\virtual_extension_method_1\Virtual_Extension_Method_1.java
package jp.yucchi.virtual_extension_method_1;

interface Hello {

    void sayHello();

    void sayHelloDefaulter() default {
        System.out.println("Default from interface : Hello World!"); 
    }

}

public class Virtual_Extension_Method_1 {

    public static void main(String[] args) {
        HelloImplementer helloImpl = new HelloImplementer();
        helloImpl.sayHello();
        helloImpl.sayHelloDefaulter();
    }
}

class HelloImplementer implements Hello {

    @Override
    public void sayHello() {
        System.out.println("Hello World!");
    }
    @Override
    public void sayHelloDefaulter(){
        System.out.println("Defautler overridden from class : Hello World!");
    }
}

 

それでは実行させてみます。

Virtual Extension Methods 2

ちゃんとオーバーライドされてますね!(^^)

なかなか面白いですね。

この Virtual Extension Methods は Lambda を実装するのにおまけではなく

必要不可欠な実装らしいです。

私は Lambda のことはまだほとんど解りませんが JDK 8 がリリースされるのが少し楽しみになってきました。(*^_^*)

Hatena タグ:

皆既日食

今日は皆既日食を見ることができた。

ただ、どうせ天気が良くなくて見られないだろうと思っていた私は日食グラスなるものを購入してなかった。

朝、目覚めた(起こされた)私は唖然とした。

快晴じゃん!

しかたないからサングラスに車の窓にはるフィルムのあまりを貼って光の透過率を調整した。

テレビで蛍光灯の光がうっすらでも見えるものはダメとかいってたので見えない状態まで貼った。

こんなので大丈夫かなと思いつつ見てみると・・・

太陽の力 恐るべしでした。

皆既日食 綺麗でした(^^)

もう、私が生きてる間に見ることはないだろう。

冥土の土産にいいものを見ることができて幸せだ。