首頁 > Java > java教程 > 主體

Java 中的函數式介面

王林
發布: 2024-08-30 16:04:14
原創
537 人瀏覽過

它在java 8中首次引入。函數式介面可以定義為具有單一抽象方法的介面。這意味著 java 中的函數式介面僅提供單一的基本功能。但是,除了單一抽象方法之外,函數式介面還可以包含靜態方法和預設方法。 java.util.function.Function、java.util.function.Predicate、UnaryOperator、BinaryOperator、Supplier、Consumer 是 java 中內建函數式介面的範例。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

函數式介面的語法

下面給了基本語法:

public interface MyFunctionalInterface(){
// abstract method
public void functionalMethod();
}
登入後複製

從上面的語法中,我們可以看到名為MyFunctionalInterface的介面只包含一個未實現的方法;這就是為什麼它可以被視為一個函數式介面。  它也可以包含靜態和預設方法,如下所示:

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();
}
登入後複製

此外,可以使用 Lambda 表達式來實作函數式接口,如下所示:

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
登入後複製
登入後複製

我們也可以使用註解或將介面宣告為函數式介面。以下是如何使用註解宣告函數式介面:

MyFunctionalInterface functionalInterface = () ->{
// basic functionality logic goes here
}
登入後複製
登入後複製

@FunctionalInterface 是在 java 8 中引入的,用於在介面違反函數式介面規則時出現編譯器層級錯誤。使用@FunctionalInterface註解聲明介面使得介面具有功能性,如果使用多個抽象方法,則會產生編譯錯誤。

關於函數式介面的要點

以下是一些要點:

  • 函數介面中只允許有一個抽象方法。如果函數介面不使用 @FunctionalInterface 註解,則可以宣告多個抽象方法,但在這種情況下,該介面將被視為非函數式。
  • @FunctionalInterface 註解的使用是可選的;它僅用於編譯器層級檢查。
  • 函數式介面可以包含任意數量的靜態方法和預設方法。
  • 重寫父類別的方法不會違反函數式介面的規則。

例:

@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

在此範例中,我們將了解如何使用 lambda 表達式建立這些介面。

代碼:

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 函數式介面的主要優點是支援 lambda 表達式,從而消除了大量樣板程式碼,從而開發出小型、高效且簡潔的程式碼。

以上是Java 中的函數式介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!