ホームページ >Java >&#&チュートリアル >戻り値の型を持つメソッドを Java のコンシューマ インターフェイスでどのように使用できますか?

戻り値の型を持つメソッドを Java のコンシューマ インターフェイスでどのように使用できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-23 04:12:13637ブラウズ

How Can Methods with Return Types Be Used with Java's Consumer Interface?

戻り値の型の互換性を持つ Lambda メソッド参照を理解する

Lambda 式とメソッド参照は、Java で関数インターフェイスを定義するための代替方法を提供します。ただし、Consumer の accept メソッドの戻り値の型が void であるにもかかわらず、戻り値の型を持つメソッド参照が Consumer インターフェイスと一致するように見える場合、混乱が生じます。

設計の基礎

Brian Goetz は次のように説明しています。この動作は意図的なものです。これにより、開発者は、メソッドを直接呼び出すのと同じ方法で、メソッドを関数インターフェイスに適応させることができます。したがって、値を返すメソッドは、戻り値を無視して Consumer インターフェイスで使用できます。

ラムダ式と戻り値の型

ラムダ式は 2 つの形式を取ることができます:

  • (引数) ->式: この形式は値として評価されるため、void との互換性はありません。たとえば、() -> { 戻る ""; } は void と互換性がありませんが、() -> {} または () -> { 戻る;
  • (引数) -> { ステートメント* }: このフォームには 1 つ以上のステートメントが含まれます。コード パスが値を返さない場合、これは void 互換です。正常な完了を妨げる例外も、そのようなラムダを void 互換にします。

メソッド参照とステートメント

メソッド参照は、関数インターフェイスを定義するもう 1 つの方法です。ただし、すべてのメソッドを Consumer でメソッド参照として使用できるわけではありません。具体的には:

  • void 以外の戻り値の型を持つメソッドは、Consumer でのメソッド参照として使用できません。
  • ステートメントでもある式は void と互換性があります。たとえば、s ->;メソッド呼び出しはステートメントとみなされるため、s.toString() は void と互換性があります。

例外

値の互換性がない唯一の式形式は (arg) -> です。メソッドReturningVoid(arg)。これは値を返さないためです。

結論

メソッド参照と Consumer の互換性は、戻り値の型と式がステートメントとして使用できるかどうかによって決まります。この概念を理解すると、ラムダとメソッド参照が Java の関数インターフェイスとどのように対話するかを明確にするのに役立ちます。

以上が戻り値の型を持つメソッドを Java のコンシューマ インターフェイスでどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。