JavaDayTokyo2015行ってきました
「したたか」を漢字で書くと「強か」って書くことを初めて知ったにいやんです。こんばんわ。
ソースはわかる人にはわかりますかねw
さて、ちょっと前の話ですが、JavaDayTokyoに行ってきました。
去年も行ったのですが、話題は今回もJAVA8に関する事が多かったですねー。
前回も思ったのですが、やはりstreamAPIは便利そうですね。
今あるファイル処理がメインのバッチ処理を全部これで書き直したくなりましたよ。
map,distinct,sort,filterなど使えば今まで使っていたループ処理など使わなくてよくなりますし、parallel使えば速度向上も図れそうですしね!
parallelについてはオーバーヘッドあるので、遅くなる場合もあるから注意してね!との事でしたが。
ゴールドマンサックスの話ではstreamAPIで書くのは綺麗じゃない!みたいな事を言っていて(独自に作ったGS Collectionsのがいい!)正面から喧嘩売ってるなーって思って面白かったですねw
発表された資料は以下のサイトから見る事が出来ます。
デフォルトメソッドについては他のブログで以前に私が書いた記事があったので、引用しておきます
以下引用----------------------------------------------------------------
default methodsとはなんぞやというと、Interfaceクラスで関数の前にdefaultとつけるとなんと実装が書けるようになりました!
こんな感じ
1 |
public interface HogeInterface { |
2 |
void hello(); |
3 |
default void say(String str) { |
4 |
System.out.println("Hoge " + str); |
5 |
} |
6 |
} |
Interfaceに実装を書いても、もちろんオーバーライド出来ます。
なので、defaultの動きは決めといて、違う動きしたい時はオーバーライドしてって事が出来るようになりました。
え?これって抽象クラスと一緒じゃないの??って思ったあなた。
とっても鋭いです!
実は抽象クラスと決定的な違いは多重継承(のようなもの)が出来るようになったのです!
たとえばHogeInterfaceの他にMogeInterfaceを作ってみましょう
1 |
public interface MogeInterface { |
2 |
void hello(); |
3 |
default void say(String str) { |
4 |
System.out.println("Moge " + str); |
5 |
} |
6 |
} |
そして、HogeとMogeの実装するクラスを以下のように作る事が出来ます。
1 |
public class HogeMogeImpl implements HogeInterface,MogeInterface { |
2 |
@Override |
3 |
public void hello() { |
4 |
System.out.println("I am HogeMoge"); |
5 |
} |
6 |
|
7 |
@Override |
8 |
public void say(String str) { |
9 |
HogeInterface. super .say(str); |
10 |
} |
11 |
} |
実装のないhelloメソッドについては実装を記述し、sayメソッドについてはどちらのクラスのメソッドを呼ぶか記述することが出来るようになりました。
実際にこのクラスを呼んでみると
1 |
HogeMogeImpl hogemoge = new HogeMogeImpl(); |
2 |
hogemoge.say("hogemoge test"); |
きちんとHogeInterfaceのsayメソッドが呼ばれているのがわかると思います。
1 |
Hoge hogemoge test |