ファンクショナルインターフェース
Suppiler 引数なし・戻り値あり。
getメソッドのみ定義されている。
プリミティブ型用にBooleanSupplier, IntSupplier, LongSupplier, DoubleSupplierが用意されている。
関数を変数のように扱える。
// Lambda式でパラメータが0個の場合は括弧を省略できない。 Supplier<Object> sp = () -> LocalDateTime.now().plusHours(-8); System.out.println(sp.get()); //2019-07-06T07:03:53.413 Thread.sleep(10000); // 10秒間スリープ。 System.out.println(sp.get()); //2019-07-06T07:04:03.420
関数をパラメータのように渡せる。
public void doTest1() { Supplier<String> mydate = () -> new SimpleDateFormat("yyyyねんMMがつddにちですよ").format(new Date()); doTest1Re(mydate); } public void doTest1Re(Supplier<String> mydate) { System.out.println(mydate.get()); }
プリミティブ型での使用例。
BooleanSupplier csIsMonday = () -> Calendar.getInstance().get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY; System.out.println(csIsMonday.getAsBoolean()); IntSupplier csYear = () -> Calendar.getInstance().get(Calendar.YEAR); System.out.println(csYear.getAsInt()); LongSupplier csYearSquare = () -> Calendar.getInstance().get(Calendar.YEAR) * Calendar.getInstance().get(Calendar.YEAR); System.out.println(csYearSquare.getAsLong()); DoubleSupplier csYearPI = () -> Calendar.getInstance().get(Calendar.YEAR) * Math.PI; System.out.println(csYearPI.getAsDouble());
メソッド参照での使用例
Supplier<Object> cs = Instant::now; System.out.println(cs.get());