最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring注解之@FunctionalInterface詳解(函數(shù)式接口)

 更新時(shí)間:2025年09月03日 15:05:54   作者:minh_coo  
@FunctionalInterface是Java8注解,標(biāo)識(shí)僅含一個(gè)抽象方法的函數(shù)式接口,支持Lambda,編譯檢查確保符合定義,提升可讀性,非強(qiáng)制,繼承方法需注意計(jì)數(shù),Object方法不計(jì)入

@FunctionalInterface函數(shù)式接口

@FunctionalInterface 是Java 8引入的注解,表明一個(gè)接口是函數(shù)式接口。函數(shù)式接口,即只包含一個(gè)抽象方法的接口。

目的就是告訴別人,這個(gè)接口就一個(gè)核心抽象方法,是用來寫Lambda 表達(dá)式的。

1、函數(shù)式接口定義

  • 是一個(gè)接口;
  • 有且僅有一個(gè)抽象方法;
  • 可以包含任意數(shù)量的默認(rèn)方法(default方法);
  • 可以包含任意數(shù)量的靜態(tài)方法(static方法);
  • 可以包含從java.lang.Object類繼承來的公共方法(如toString(), equals(), hashCode()),這些方法不被計(jì)入抽象方法的數(shù)量。

如下是一個(gè)合格的函數(shù)式接口:

@FunctionalInterface
interface ValidFI {
    void execute();
    boolean equals(Object obj); // 覆蓋 Object 的方法,不計(jì)入
    String toString();        // 覆蓋 Object 的方法,不計(jì)入
    static void helper() {}   // 靜態(tài)方法,允許
    default void log() {}     // 默認(rèn)方法,允許
}

2、作用

(1)編譯時(shí)檢查

當(dāng)給一個(gè)接口添加了 @FunctionalInterface 注解時(shí),編譯器會(huì)強(qiáng)制檢查該接口是否嚴(yán)格符合函數(shù)式接口的定義(即只有一個(gè)抽象方法)。

如果接口不符合條件(例如沒有抽象方法、或者有多個(gè)抽象方法),編譯器會(huì)立即報(bào)錯(cuò)。這有助于在開發(fā)階段就發(fā)現(xiàn)錯(cuò)誤,避免運(yùn)行時(shí)出現(xiàn)問題

(2)提升代碼可讀性,明確意圖

在代碼中使用 @FunctionalInterface 可以清晰地告訴閱讀者:“這個(gè)接口是設(shè)計(jì)用來作為函數(shù)式接口使用的,它只有一個(gè)核心抽象方法,目的是為了支持 Lambda 表達(dá)式或方法引用。”

它提升了代碼的可讀性和可維護(hù)性,是一種良好的文檔實(shí)踐。

注意:

  • @FunctionalInterface 不是強(qiáng)制性的。即使一個(gè)接口沒有添加 @FunctionalInterface 注解,只要它事實(shí)上只包含一個(gè)抽象方法,它仍然是一個(gè)函數(shù)式接口。Lambda 表達(dá)式和方法引用仍然可以用在這個(gè)接口上。
  • 繼承的抽象方法會(huì)被記入。如果一個(gè)接口繼承另一個(gè)接口,而子接口添加了新的抽象方法,這時(shí)在子接口使用@FunctionalInterface,編譯器會(huì)報(bào)錯(cuò)。
  • Object 類方法不計(jì)入抽象方法,不影響函數(shù)式接口定義。

3、代碼示例

// 1. 定義函數(shù)式接口
@FunctionalInterface
interface TextTransformer {
    // 單一抽象方法 (函數(shù)式接口核心)
    String transform(String input);

    // 默認(rèn)方法 1
    default String transformToUpper(String input) {
        return transform(input).toUpperCase();
    }

    // 默認(rèn)方法 2
    default void printTransformation(String input) {
        String result = transform(input);
        System.out.println("原始文本: " + input);
        System.out.println("轉(zhuǎn)換結(jié)果: " + result);
    }

    // 靜態(tài)方法 (不影響函數(shù)式接口性質(zhì))
    static void printInfo() {
        System.out.println("這是一個(gè)文本轉(zhuǎn)換器接口");
    }
}

// 2. 傳統(tǒng)實(shí)現(xiàn)類
class ReverseTransformer implements TextTransformer {
    @Override
    public String transform(String input) {
        return new StringBuilder(input).reverse().toString();
    }
}

public class FunctionalInterfaceDemo {
    public static void main(String[] args) {
        // 3. 使用傳統(tǒng)實(shí)現(xiàn)類
        TextTransformer reverser = new ReverseTransformer();
        System.out.println("反轉(zhuǎn)文本: " + reverser.transform("Hello"));
        reverser.printTransformation("Java");
        System.out.println("大寫反轉(zhuǎn): " + reverser.transformToUpper("World"));
        
        // 調(diào)用接口靜態(tài)方法
        TextTransformer.printInfo();
        System.out.println("-------------------");
        
        // 4. 使用Lambda表達(dá)式實(shí)現(xiàn)函數(shù)式接口
        TextTransformer doubler = input -> input + " " + input;
        doubler.printTransformation("Repeat");
        System.out.println("大寫重復(fù): " + doubler.transformToUpper("Twice"));
        System.out.println("-------------------");
        
        // 5. 使用方法引用實(shí)現(xiàn)函數(shù)式接口
        TextTransformer trimmer = String::trim;  // 等價(jià)于 input -> input.trim()
        trimmer.printTransformation("   Trim this text   ");
        System.out.println("-------------------");
        
        // 6. 作為方法參數(shù)傳遞
        processText("Functional", input -> "[" + input + "]");
    }
    
    // 方法接受函數(shù)式接口作為參數(shù)
    public static void processText(String text, TextTransformer transformer) {
        System.out.println("處理結(jié)果: " + transformer.transform(text));
        
        // 使用接口的默認(rèn)方法
        transformer.printTransformation(text);
        
        // 鏈?zhǔn)秸{(diào)用默認(rèn)方法
        System.out.println("鏈?zhǔn)睫D(zhuǎn)換: " + 
            transformer.transformToUpper(text).replace("A", "@"));
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot與Dubbo整合的方式詳解

    SpringBoot與Dubbo整合的方式詳解

    這篇文章主要介紹了SpringBoot與Dubbo整合的方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot整合JdbcTemplate的示例代碼

    SpringBoot整合JdbcTemplate的示例代碼

    JdbcTemplate是Spring框架自帶的對JDBC操作的封裝,目的是提供統(tǒng)一的模板方法使對數(shù)據(jù)庫的操作更加方便、友好,效率也不錯(cuò),這篇文章主要介紹了SpringBoot整合JdbcTemplate,需要的朋友可以參考下
    2022-08-08
  • springMVC中RestTemplate傳值接值方法

    springMVC中RestTemplate傳值接值方法

    今天小編就為大家分享一篇springMVC中RestTemplate傳值接值方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Java中Stream?Filter多條件篩選過濾代碼舉例

    Java中Stream?Filter多條件篩選過濾代碼舉例

    這篇文章主要給大家介紹了關(guān)于Java中Stream?Filter多條件篩選過濾的相關(guān)資料,Java Stream中的filter方法可以使用多個(gè)條件來過濾數(shù)據(jù),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • Java通過工廠、Map容器創(chuàng)建對象的方法

    Java通過工廠、Map容器創(chuàng)建對象的方法

    這篇文章主要介紹了Java通過工廠、Map容器創(chuàng)建對象的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • spring Data jpa簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    spring Data jpa簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了spring Data jpa簡介的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • Mybatis的association使用子查詢結(jié)果錯(cuò)誤的問題解決

    Mybatis的association使用子查詢結(jié)果錯(cuò)誤的問題解決

    本文主要介紹了Mybatis的association使用子查詢結(jié)果錯(cuò)誤的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • JavaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(2)

    JavaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(2)

    這篇文章主要介紹了JavaWeb實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)的第二篇,實(shí)現(xiàn)學(xué)生管理系統(tǒng)的查找和添加功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java依賴倒轉(zhuǎn)原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java依賴倒轉(zhuǎn)原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java依賴倒轉(zhuǎn)原則的定義及問題由來解決方案,感興趣的朋友一起看看吧
    2017-08-08
  • JavaSE static final及abstract修飾符實(shí)例解析

    JavaSE static final及abstract修飾符實(shí)例解析

    這篇文章主要介紹了JavaSE static final及abstract修飾符實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評論

赤壁市| 兴业县| 高邑县| 阳曲县| 大悟县| 永新县| 九江市| 乡宁县| 洱源县| 沧源| 昌吉市| 天全县| 西林县| 海淀区| 康乐县| 临安市| 商都县| 青浦区| 博爱县| 尉犁县| 黄骅市| 六盘水市| 仙居县| 天门市| 密云县| 聂拉木县| 清镇市| 望奎县| 香河县| 绥江县| 浙江省| 施甸县| 广汉市| 四川省| 共和县| 厦门市| 进贤县| 绍兴市| 木里| 金川县| 嘉义市|