【Java】関数型インタフェースのSupplierとは?

Java

「Supplierて何?」

「そもそも関数型インタフェースって何だろう?」

「Supplierの機能が中々理解できない・・・」

このようなお悩みを抱えている方は多いのではないでしょうか?

私も勉強し始めたころは「関数型インタフェースなどとまた頭が痛くなるような名前が登場したな・・・」と思っていて中々理解が追いつきませんでした。

なのでは私なりに理解した時のイメージなどを今回は上記お悩みを抱えている方に向けて発信していきたいと思います。

関数型インタフェースとは?

Supplierについて、ご紹介する前にそもそも関数型インタフェースとは何だろう?という方に向けて、どのようなものなのか解説していきます。

すでに知っているという方は読み飛ばしていただいて次章の「Supplierとは?」から読んでいただいても大丈夫です。

では関数型インタフェースとは何なのか?についてですが、「みんながよく使いそうな機能を事前に定義しておいてくれたインタフェース」という感じです。

あまり堅苦しい表現など使っても分かりにくいと思いますし、使う側からしたら上記だけ分かっていれば作成された経緯などを詳細に知る必要もないと思いますので、こういった理解で自分はしています。

ではそんな関数型インタフェースにはどういったものがあるかというと下記のようなものがあります。

  • Supplier
  • Consumer
  • BiConsumer
  • Predicate
  • BiPredicate
  • Function
  • BiFunction
  • UnaryOperator
  • BinaryOperator

この記事ではSupplierについて解説していきますが、また他の記事で上記は解説していきます。

これ以外にもいくつかあるようですが、私もすべてをまだ理解しきったわけでなくJavaの資格で出てくるものをメインに勉強していっている感じです。

今後新しい関数型インタフェースを学ぶ機会があれば、都度紹介していこうと思います。

Supplierとは?

ではそんな関数型インタフェースの一つであるSupplierとはどういったものなのか紹介していきます。

主な機能を言うと戻り値はあるが、引数はないというものです。

英語からもわかるかと思いますが、Supplierは供給者という意味があります。

つまり何かを提供する側ということです。

私はSupplierについて理解するときはいつも下記のような図を頭の中でイメージしています。

Supplierという店があったとすると、そこから私たちは戻り値という商品を買っています。

現実ならどのような店も引数という名の供給がないと成り立ちませんが、私たち消費者からするとそういった点を気にする人はごく一部の人です。

なのでSupplierという店から私たち消費者への商品の移動のみに目を向けるというイメージが、この関数型インタフェースを理解した時の私のイメージです。

私の個人的なイメージですので理解できないという方もいるかとは思いますので、実際のプログラムでも解説しておきます。

【コード】
import java.util.function.Supplier;
public class Store {
	public static void main(String[] args) {
		Supplier<String> commodity = () -> "鶏肉です";
		System.out.println("おすすめの商品はありますか?");
		System.out.println(commodity.get());
	}
}
【実行結果】
おすすめの商品はありますか?
鶏肉です

上記がSupplierを使用した際のコードとなります。

関数型インタフェースには抽象メソッドが用意されており、それを使用することで戻り値を受け取ったり、引数を渡したりすることができます。

抽象メソッドってなんだ?という方は下記記事で解説していますので、一度読んでみてください。

【Java】abstractとは? | エンジニアKISARAGIの備忘録 (kisaragi-it.com)

Supplierにはget()という抽象メソッドが用意されていて、それを使用することで戻り値を取得できます。

また「Supplier<String> commodity = () -> “鶏肉です”;」というようにSupplierを使用していますが、ここで登場している「->」はラムダ式というものを使用する際に登場する記号です。

ラムダ式についてはまた解説しますが、コードをより簡単にしてくれる機能と今は覚えておいていただければ大丈夫です。

この「->」の左側の括弧内に引数を指定して、右側に戻り値を指記載します。

上記コードですと引数なしのため、括弧内は何も記載がなく戻り値は「鶏肉です」という文字列となっています。

またSupplierインタフェースのすぐ右に<>と記載していますが、これはダイヤモンド演算子というものです。

これもまた別記事で詳しく解説しますが、今は戻り値の型をこのダイヤモンド演算子の中で指定していると理解していただいたら大丈夫です。

今回記載したコードですと、戻り値はString型となり「鶏肉です」という文字列を戻します。

ここで記載したメソッドも関数型インタフェースとセットで覚えておいた方がいいです。

今回ですとSupplierインタフェースの戻り値を取得するためのgetメソッドということで、結構覚えやすいのではないでしょうか?

まとめ

この記事ではJavaの関数型インタフェースSupplierについて解説してきました。

  • 関数型インタフェースとは?
  • Supplierとは?

関数型インタフェースはいくつもあるため、他のインタフェースと混同してしまうこともあります。

なので自分なりのイメージを持つことで他のインタフェースとごちゃまぜになることを防ぐことができますので、この機会にぜひ覚えてみてください。

以上で今回の解説は終了となります。

コメント

タイトルとURLをコピーしました