首頁 > Java > java教程 > 通用功能介面

通用功能介面

Mary-Kate Olsen
發布: 2025-01-12 09:30:46
原創
441 人瀏覽過

Interfaces Funcionais Genéricas

主要概念

  • Lambda 表達式不能是通用的: 您不能直接在 lambda 表達式中指定類型參數。
  • 函數式介面可以是泛型的: lambda 表達式的目標類型由函數式介面參考中指定的類型參數決定。
  • 程式碼重複使用:通用介面消除了為不同類型的資料建立多個功能介面的需要,讓您重複使用不同類型的邏輯。

實例:SomeTest 通用函數式介面
SomeTest 通用介面可用於實作不同類型的 lambda(例如 Integer、Double、String)。

代碼

// Interface funcional genérica com dois parâmetros que retorna um boolean
interface SomeTest<T> {
    boolean test(T n, T m);
}

public class GenericFunctionalInterfaceDemo {
    public static void main(String[] args) {
        // Expressão lambda para verificar se um inteiro é fator de outro
        SomeTest<Integer> isFactor = (n, d) -> (n % d) == 0;
        if (isFactor.test(10, 2)) {
            System.out.println("2 is a factor of 10");
        }

        // Expressão lambda para verificar se um Double é fator de outro
        SomeTest<Double> isFactorD = (n, d) -> (n % d) == 0;
        if (isFactorD.test(212.0, 4.0)) {
            System.out.println("4.0 is a factor of 212.0");
        }

        // Expressão lambda para verificar se uma string faz parte de outra
        SomeTest<String> isIn = (a, b) -> a.indexOf(b) != -1;
        String str = "Generic Functional Interface";
        System.out.println("Testing string: " + str);
        if (isIn.test(str, "face")) {
            System.out.println("'face' is found.");
        } else {
            System.out.println("'face' not found.");
        }
    }
}

登入後複製

退出

2 is a factor of 10
4.0 is a factor of 212.0
Testing string: Generic Functional Interface
'face' is found.

登入後複製

範例說明
通用介面定義:

interface SomeTest<T> {
    boolean test(T n, T m);
}

登入後複製

T 是通用類型,將被特定類型(Integer、Double、String 等)取代。

lambda 表達式的使用:

  • 第一個 lambda (isFactor) 檢查一個整數是否可以被另一個整數整除。
  • 第二個 lambda (isFactorD) 執行相同的操作,但使用 Double 類型的數字。
  • 第三個 lambda (isIn) 檢查一個字串是否包含另一個字串。

相同介面的重複使用:
SomeTest 介面用於不同的資料類型(Integer、Double、String),展示了泛型的靈活性。

通用函數式介面的好處

  • 減少冗餘程式碼:單一通用介面取代多個特定介面。
  • 靈活性:以相同的邏輯行為適應不同類型的資料。
  • 與 lambda 表達式的相容性: 允許您建立可重複使用且更簡潔的 lambda。

建議運動
將前面提到的NumericFunc函數介面重新設計為通用介面。用它來執行諸如計算數字的平方或檢查數字是否為偶數等操作。

完整範例:將 NumericFunc 重構為泛型

// Interface funcional genérica com um parâmetro e um retorno
interface NumericFunc<T> {
    T apply(T n);
}

public class GenericNumericFuncDemo {
    public static void main(String[] args) {
        // Lambda para calcular o quadrado de um número inteiro
        NumericFunc<Integer> square = (n) -> n * n;
        System.out.println("Quadrado de 5: " + square.apply(5)); // Saída: 25

        // Lambda para calcular o quadrado de um número Double
        NumericFunc<Double> squareDouble = (n) -> n * n;
        System.out.println("Quadrado de 3.14: " + squareDouble.apply(3.14)); // Saída: 9.8596

        // Lambda para verificar se um número é par (retorna "Par" ou "Ímpar")
        NumericFunc<Integer> isEven = (n) -> (n % 2 == 0) ? n  :  -1;
        System.out.println("Resultado Numero pares de : Resultado com multiplos valores "  + isEven.apply(15)) ;

    }
}

登入後複製

輸出:

Quadrado de 5: 25
Quadrado de 3.14: 9.8596
Resultado Número pares de : Resultado com múltiplos valores -1
登入後複製

以上是通用功能介面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板