今回は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 件のコメント:
コメントを投稿