今日も Java8 の新機能に慣れるべくいつものようにネットサーフィンで得た情報を試してみます。
今回は前回チラッと現れたSupplier インターフェイスと Constructor References をためしてみようと思います。
非常に簡単でシンプルな内容なのです。ラムダ式を使う方法とコンストラクターリファレンスを使う方法を記述してます。
それを Supplier インターフェイスの get() メソッドで取得してそれぞれのインスタンスメソッドを実行させているだけです。
特に難しいところは無さそうですが、この使い分けのシチュエーションは微妙かもしれませんね。
では、プログラムのコードです。
| mylambdaexamples_3\Airplane.java |
package mylambdaexamples_3;
class Airplane {
void pilot() {
System.out.println("飛行機を操縦します。");
}
}
| mylambdaexamples_3\JetAirplane.java |
package mylambdaexamples_3;
class JetAirplane extends Airplane {
@Override
void pilot() {
System.out.println("ジェット機を操縦します。");
}
}
| mylambdaexamples_3\MyLambdaExamples_3.java |
package mylambdaexamples_3;
import java.util.function.Supplier;
public class MyLambdaExamples_3 {
public static void main(String[] args) {
// Lambda Expression
pilot(() -> new Airplane());
pilot(() -> new JetAirplane());
// Constructor References
pilot(Airplane::new);
pilot(JetAirplane::new);
}
static void pilot(Supplier extends Airplane> supplier) {
Airplane airPlane = supplier.get();
airPlane.pilot();
}
}
実行結果は次のようになります。
飛行機を操縦します。
ジェット機を操縦します。
飛行機を操縦します。
ジェット機を操縦します。
Java の学習の初めのころにこのような感じのをやったようなデジャブを感じます。
いちおう JavaDoc をサラッと見てみます。
いつものように優秀な翻訳支援ソフトに活躍してもらいます。(>_<。)
Supplier
@FunctionalInterface
public interface Supplier<T>
A supplier of objects. The result objects are either created during the invocation of Supplier.get or by some prior action.
パラメータ:
T– The type of objects returned byget
日付:
1.8
オブジェクトのサプライヤ。 オブジェクトが Supplier.get の呼出しの間に、あるいは若干の事前のアクションによってあるいは作り出されるという結果。
パラメータ: get によりオブジェクトのタイプが返される。
get()
java.util.function.Supplier
public T get()
Returns an object.
戻り値:
an object
オブジェクトを返します。
特に難しいところは無さそうですね。強いて言うなら英語の JavaDoc か・・・
そういうことでそろそろお約束の時間です。
この「もっと Lambda 」シリーズは、インターネット上で得た情報を元にそれを少し変更しているだけです。
悲しいことにその情報源は英語なので詳しい内容はわかりません。
よって私の推測で解釈された内容となってますので間違いがあると思います。
Java8 もまだ build86 を使用していますので API の変更により記述方法が変わるかもしれません。
早く正式リリースされて日本語でこの超便利で素敵な新機能を勉強したい今日この頃です。