Java の関数インターフェース

王林
リリース: 2024-08-30 16:04:14
オリジナル
591 人が閲覧しました

これは Java 8 で最初に導入されました。関数型インターフェイスは、単一の抽象メソッドを持つインターフェイスとして定義できます。これは、Java の関数型インターフェイスが単一の基本機能のみを提供することを意味します。ただし、関数型インターフェイスには、単一の抽象メソッドに加えて、静的メソッドとデフォルト メソッドを含めることができます。 java.util.function.Function、java.util.function.Predicate、UnaryOperator、BinaryOperator、Supplier、Consumer は、Java の組み込み関数インターフェイスの例です。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

関数インターフェースの構文

基本的な構文を以下に示します。

public interface MyFunctionalInterface(){
// abstract method
public void functionalMethod();
}
ログイン後にコピー

上記の構文から、MyFunctionalInterface という名前のインターフェイスには未実装のメソッドが 1 つだけ含まれていることがわかります。そのため、これは機能的なインターフェイスと見なすことができます。 次に示すような静的メソッドやデフォルト メソッドを含めることもできます。

public interface MyFunctionalInterface(){
public default void defaultMethod(){
// default method logic goes here
}
public static void staticMethod(){
// static method logic goes here
}
// abstract method
public void functionalMethod();
}
ログイン後にコピー

また、次のようなラムダ式を使用して関数型インターフェイスを実装することもできます。

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
ログイン後にコピー
ログイン後にコピー

アノテーションを使用したり、インターフェイスを関数インターフェイスとして宣言したりすることもできます。アノテーションを使用して関数型インターフェイスを宣言する方法は次のとおりです。

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
ログイン後にコピー
ログイン後にコピー

@FunctionalInterface は Java 8 で導入され、インターフェイスが関数型インターフェイスの規則に違反した場合のコンパイラ レベルのエラーに使用されます。 @FunctionalInterface アノテーションを使用してインターフェイスを宣言すると、インターフェイスは機能しますが、複数の抽象メソッドが使用されるとコンパイル エラーが生成されます。

機能インターフェースに関する注意事項

ここでは重要なポイントをいくつか示します:

  • 関数インターフェイスでは抽象メソッドを 1 つだけ使用できます。 @FunctionalInterface アノテーションが関数インターフェースで使用されていない場合、複数の抽象メソッドを宣言できますが、その場合、そのインターフェースは非関数型とみなされます。
  • @FunctionalInterface アノテーションの使用はオプションです。コンパイラ レベルのチェックにのみ使用されます。
  • Functional インターフェイスには、任意の数の静的メソッドとデフォルト メソッドを含めることができます。
  • 親クラスからメソッドをオーバーライドしても、関数型インターフェイスのルールは破られません。

例:

@FunctionalInterface
public interface MyFunctionalInterface(){
// abstract method
public void functionalMethod();
@Override
public boolean equals(Object object);
//method overridden from parent class
}
ログイン後にコピー

上記のインターフェースは親クラスのメソッドをオーバーライドし、複数の抽象メソッドを宣言していないため、関数型インターフェースとみなすことができます。

機能インターフェイスの実装例

次に、Java 関数インターフェースの宣言と使用法を示す Java コード例を見ていきます。

例 #1

この例では、組み込み関数インターフェース java.util.function.function インターフェースの使用方法を示します。以下は Function インターフェースの宣言です。

インターフェース:

package java.util.function;
public interface Function<T,R>{
public <R> apply(T inputparams);
}
ログイン後にコピー

上記のインターフェースを使用するには、次のようにクラスに実装する必要があります。

コード:

import java.util.function.*;
public class FunctionalInterfaceDemo implements Function<Integer, Integer>{
@Override
public Integer apply (Integer n){
return n*n;
}
public static void main (String args[]){
FunctionalInterfaceDemo demo = new FunctionalInterfaceDemo ();
Integer sqroot= demo.apply(12);
System.out.println("Square root of 12 is " + sqroot);
}
}
ログイン後にコピー

出力:

Java の関数インターフェース

例 #2

この例では、ラムダ式を使用してこれらのインターフェイスがどのように作成されるかを見ていきます。

コード:

public class FunctionalInterfaceDemo{
public static void main (String args[]){
// creating functional Interface instance
Runnable r = () -> {System.out.println ("Executing Thread........");};
new Thread(r).start();
}
}
ログイン後にコピー

出力:

Java の関数インターフェース

例 #3

この例では、リストを反復するために別の組み込みインターフェイス コンシューマを使用する様子を見ていきます。

コード:

import java.util.function.*;
import java.util.*;
public class FunctionalInterfaceDemo{
public static void main (String args[]){
List<String> list = new ArrayList<String>();
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
list.add("Five");
list.add("Six");
// Iterate arraylist using consumer
list.forEach(new Consumer<String>(){
@Override
public void accept(String item){
System.out.println(item);
}
});
}
}
ログイン後にコピー

出力:

Java の関数インターフェース

結論

上記の記事では、Java の関数型インターフェイスについて明確に理解できます。 Java 8 関数インターフェイスを使用する主な利点は、多くの定型コードを削除するラムダ式のサポートです。その結果、小さく、効率的で、よりクリーンなコードが開発されます。

以上がJava の関数インターフェースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート