2014年1月20日月曜日

Java 8を使ってみる(使用編・インターフェース)

準備編のつづきです。
今回はJava 8 を実際に使ってみましょう。


重みづけ抽選のロジック(以下RandomUtil)を、Java 8だとどうなるのか見ていきます。
ここでは、主にインターフェースの変更点についてみていきます。


FunctionalInterface


Java 8はインターフェースにFunctionalInterfaceというものが追加されました。
インターフェースに対して@FunctionalInterface宣言をするまたは、
一つのメソッドのみ定義するとFunctionalInterfaceと認識されます

RandomUtilだと、

public interface Weight<T> {
    int getWeight(T temp) ;
}

はJava 8ではFunctionalInterfaceとなります。

@FunctionalInterface
public interface Weight<T> {
    int getWeight(T temp) ;
}

と宣言をつけたものと同じ意味です。


FunctionalInterfaceにはラムダ式を渡すことができます。


TestMember member = RandomUtil.weightedRandom(members,
                    new Weight<TestMember>() {
                        public int getWeight(TestMember m) {
                            return m.weight;
                        }
                    });

以前までは、上記のように関数を渡していたのですが、
ラムダ式を渡すようにすると、次のように簡略化できます。

TestMember member = RandomUtil.weightedRandom(members,
                    m -> {
                        return m.weight;
                    });



Default Method


また、インターフェースにDefaultMethodを追加できるようになりました。


public interface Weight<T> {
    default int getWeight(T temp) {
        return 1;
    }
}

上のように定義した場合、

TestMember member = RandomUtil.weightedRandom(members,
                    new Weight<TestMember>() { });

とすると、getWeight の定義をしなくてもDefaultMethodとして定義している
メソッドが呼ばれます。ちなみに、DefaultMethodを定義していると
FunctionalInterfaceにはできません。



つづく


使用したプロジェクト:RandomUtil1.zip








0 件のコメント: