これは 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 アノテーションを使用してインターフェイスを宣言すると、インターフェイスは機能しますが、複数の抽象メソッドが使用されるとコンパイル エラーが生成されます。
ここでは重要なポイントをいくつか示します:
例:
@FunctionalInterface public interface MyFunctionalInterface(){ // abstract method public void functionalMethod(); @Override public boolean equals(Object object); //method overridden from parent class }
上記のインターフェースは親クラスのメソッドをオーバーライドし、複数の抽象メソッドを宣言していないため、関数型インターフェースとみなすことができます。
次に、Java 関数インターフェースの宣言と使用法を示す Java コード例を見ていきます。
この例では、組み込み関数インターフェース 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); } }
出力:
この例では、ラムダ式を使用してこれらのインターフェイスがどのように作成されるかを見ていきます。
コード:
public class FunctionalInterfaceDemo{ public static void main (String args[]){ // creating functional Interface instance Runnable r = () -> {System.out.println ("Executing Thread........");}; new Thread(r).start(); } }
出力:
この例では、リストを反復するために別の組み込みインターフェイス コンシューマを使用する様子を見ていきます。
コード:
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 8 関数インターフェイスを使用する主な利点は、多くの定型コードを削除するラムダ式のサポートです。その結果、小さく、効率的で、よりクリーンなコードが開発されます。
以上がJava の関数インターフェースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。