Java8で登場した関数型インタフェースとともに登場した記述法ですね。
まず、このforEachというメソッドはConsumerという型のオブジェクトを要求しています。Consumerは、何らかのオブジェクトを受け取って「何かをする」というものです。その「何か」を簡略化して書けるようにしたのがこのメソッド参照です。ここではSystem.outが持つprintlnというメソッドを使います、という意味になります。
で、この「何かをする」というものに、Listは自分の持っているオブジェクトを順番に送るのです。この場合、Listが持っている"Pochi", "kenta", "Chiro"を順番に「何か」、つまりSystem.out.printlnという行動をすることになります。
この書き方をせず、旧来の書き方で書くとするならこうなります。
java
1dogs.forEach(new Consumer<Object>{ //Listの型であるStringか、その親クラス、インタフェースの型のConsumerである必要がある
2 @Override
3 public void accept(Object o){ //「何かをする」メソッド
4 System.out.println(o); //内容が1文で、かつacceptに渡る引数がそのまま渡る場合に、メソッド参照で書ける
5 }
6});
で、forEachでどうなっているかというと、イメージですが、
java
1//List内部
2public void forEach(Consumer<? super String> action){
3 for(String s : this){
4 action.accept(s); //「何かをする」Consumerに自分のリストの中身を順番に渡す
5 }
6}
つまり、Listの中身を順番に取り出し、まずConsumerオブジェクトのacceptメソッドに渡ります。
そして、acceptメソッドで受け取ったオブジェクトをSystem.out.printlnメソッドに渡して出力します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/05/14 01:21
2016/05/14 04:59
2016/05/14 14:09
2016/05/14 14:25