日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

微服務為什么要容器化?

來源: 責編: 時間:2024-09-10 09:51:13 113觀看
導讀Lambda 表達式是 Java 8 引入的一種簡潔的表示匿名方法的方式,使用它可以用于替代某些匿名內部類對象,從而讓程序更簡潔,可讀性更好。但 Lambda 表達式的底層是如何實現的呢?接下來我們一起來看。1.未Lambda表達式未使用

Lambda 表達式是 Java 8 引入的一種簡潔的表示匿名方法的方式,使用它可以用于替代某些匿名內部類對象,從而讓程序更簡潔,可讀性更好。但 Lambda 表達式的底層是如何實現的呢?接下來我們一起來看。k7728資訊網——每日最新資訊28at.com

1.未Lambda表達式

未使用 Lambda 表達式之前,我們創建一個線程,可以這樣寫:k7728資訊網——每日最新資訊28at.com

Thread t1 = new Thread(new Runnable() {    @Override    public void run() {        System.out.println("t1");    }});t1.start();

其中 Runnable 匿名內部類,查看 Runnable 源碼,我們可以看到 Runnable 的實現如下:k7728資訊網——每日最新資訊28at.com

圖片圖片k7728資訊網——每日最新資訊28at.com

1.1 什么是匿名內部類?

匿名內部類是在 Java 中定義的一個沒有名稱的內部類。它通常在一個類的成員位置或者方法體內直接定義,并且立即實例化。k7728資訊網——每日最新資訊28at.com

匿名內部類的主要用途在于簡化代碼,避免為了實現一個簡單的功能而定義一個完整的類。它特別適用于只需要一次使用的類,比如實現一個接口的單方法(即函數式接口)的場合。k7728資訊網——每日最新資訊28at.com

PS:自從 Java 8 引入 Lambda 表達式后,很多原本使用匿名內部類的地方可以被更簡潔的 Lambda 表達式替代。k7728資訊網——每日最新資訊28at.com

上面代碼中的 new Runnable 就是一個標準匿名內部類的使用。k7728資訊網——每日最新資訊28at.com

1.2 什么是@FunctionalInterface?

@FunctionalInterface 是 Java 8 引入的一個注解,它用于標記一個接口為函數式接口。k7728資訊網——每日最新資訊28at.com

函數式接口是指只包含一個抽象方法的接口。這個注解雖然不是必需的,但它提供了一種明確的方式告訴編譯器和開發者,這個接口是設計為函數式接口的。k7728資訊網——每日最新資訊28at.com

@FunctionalInterface 注解的作用如下:k7728資訊網——每日最新資訊28at.com

  • 編譯時檢查:當一個接口被標記為 @FunctionalInterface 時,編譯器會檢查該接口是否只有一個抽象方法。如果不符合函數式接口的定義(即存在多個抽象方法),編譯器會報錯,提醒開發者修正。這為開發者提供了明確的編譯時保障,確保所標記的接口確實符合函數式接口的要求。
  • 代碼明確性:即使不加 @FunctionalInterface 注解,只要接口符合函數式接口的定義,它仍然可以被視為函數式接口。但注解的存在增加了代碼的明確性和可讀性,使得其他開發者更容易理解該接口的設計意圖。
  • 支持 Lambda 表達式:函數式接口的主要目的是為了支持 Lambda 表達式。通過 Lambda 表達式,開發者可以以更簡潔的方式實現函數式接口的抽象方法,從而減少模板代碼,使代碼更加簡潔和易于理解。由于 Lambda 表達式本身不包含類型信息,Java 編譯器需要一種機制來確定 Lambda 表達式對應的目標類型。函數式接口就扮演了這一角色——Lambda 表達式可以被賦值給任何兼容的函數式接口類型,編譯器會依據接口的唯一抽象方法來推斷 Lambda 表達式的參數類型和返回類型。

在 Java 標準庫中,有許多使用 @FunctionalInterface 注解的接口,如 java.util.function 包下的 Function、Predicate、Consumer 等,這些接口都是函數式接口,廣泛用于數據處理、過濾、轉換等操作。此外,在 Spring Boot 框架中,也經常使用函數式接口來定義事件監聽器、回調函數等。k7728資訊網——每日最新資訊28at.com

2.使用Lambda表達式

未使用 Lambda 表達式之前,我們創建一個線程是這樣寫的:k7728資訊網——每日最新資訊28at.com

Thread t1 = new Thread(new Runnable() {    @Override    public void run() {        System.out.println("t1");    }});t1.start();

而用了 Lambda 表達式,我們可以這樣寫:k7728資訊網——每日最新資訊28at.com

Thread t1 = new Thread(() -> { System.out.println("t1"); });t1.start();

從上述代碼可以看出,當我們使用 Lambda 表達式之后,代碼就變得更簡潔和優雅了。k7728資訊網——每日最新資訊28at.com

3.Lambda詳解

Lambda 表達式的語法形式如下:k7728資訊網——每日最新資訊28at.com

(parameters) -> expression

或者是:k7728資訊網——每日最新資訊28at.com

(parameters) -> { statements; }

以上語法含義如下:k7728資訊網——每日最新資訊28at.com

  • 參數列表:在圓括號內的部分,用于定義傳遞給 Lambda 體的參數。參數列表可以為空,也可以包含多個參數,參數之間用逗號隔開。
  • 箭頭符號是 Lambda 表達式的分隔符,將參數列表與表達式或語句塊分隔開。
  • Lambda 體:包含了具體的執行邏輯,可以是一個表達式或是一個由多個語句組成的代碼塊。

3.1 使用場景

Lambda 表達式主要用于執行函數式接口(Function Interface),即只有一個抽象方法的接口。常見的函數式接口包括 java.util.function 包下的 Predicate、Function、Consumer 等。k7728資訊網——每日最新資訊28at.com

3.2 舉個例子

假設我們有一個List,并且我們想要對這個列表進行過濾操作,只保留偶數元素。使用 Lambda 表達式可以非常方便地實現這一功能:k7728資訊網——每日最新資訊28at.com

import java.util.Arrays;import java.util.List;import java.util.stream.Collectors;public class Main {    public static void main(String[] args) {        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);        // 使用 Lambda 表達式過濾出偶數        List<Integer> evenNumbers = numbers.stream()                                           .filter(n -> n % 2 == 0)                                           .collect(Collectors.toList());        System.out.println(evenNumbers); // 輸出 [2, 4, 6, 8]    }}

在這個例子中,n -> n % 2 == 0 是一個 Lambda 表達式,它接受一個整數 n 作為輸入參數,并返回一個布爾值。這個 Lambda 表達式被用作 filter 方法的參數,該方法期望一個 Predicate類型的函數式接口實例。k7728資訊網——每日最新資訊28at.com

4.Lambda底層原理

Lambda 底層運行原理如下:k7728資訊網——每日最新資訊28at.com

在程序運行時,會在類中生成一個匿名內部類,匿名內部類會實現接口,并重寫接口中的抽象方法。k7728資訊網——每日最新資訊28at.com

類中會生成一個靜態方法,靜態方法中的代碼就是 Lambda 表達式中的代碼。k7728資訊網——每日最新資訊28at.com

匿名內部類重寫的抽象方法,會調用上一步的靜態方法,從而實現 Lambda 代碼的執行。k7728資訊網——每日最新資訊28at.com

所以,綜合來說,Lambda 表達式其實是匿名內部類的語法糖,這個語法糖在程序執行時會進行兌現,也就是生成匿名內部類并進行任務執行。k7728資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-112794-0.html微服務為什么要容器化?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 轉轉搜推排序服務的響應對象序列化優化

下一篇: 面試官:說說Lambda表達式底層原理?

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 從 Pulsar Client 的原理到它的監控面板

    背景前段時間業務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發送緩慢等各種問題。雖然我們有個監控頁面可以根據 topic 維度查看他的發送狀態,
  • 分布式系統中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統的小伙伴們來說,一提起分布式系統,就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • 網傳小米汽車開始篩選交付中心 建筑面積不低于3000平方米

    7月7日消息,近日有微博網友@長三角行健者爆料稱,據經銷商集團反饋,小米汽車目前已經開始了交付中心的篩選工作,要求候選場地至少有120個車位,建筑不能低
  • 三星Galaxy Z Fold5官方渲染圖曝光:13.4mm折疊厚度依舊感人

    據官方此前宣布,三星將于7月26日在韓國首爾舉辦Unpacked活動,屆時將帶來帶來包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 平乡县| 阿拉善右旗| 千阳县| 景东| 闽清县| 中江县| 巴林右旗| 吉安市| 锡林郭勒盟| 噶尔县| 沂南县| 阳谷县| 密云县| 巴南区| 武平县| 广河县| 绵阳市| 海晏县| 原平市| 洛扎县| 沧源| 津南区| 湖州市| 天峨县| 大姚县| 大洼县| 连云港市| 红原县| 田林县| 连平县| 金川县| 延吉市| 兴仁县| 永顺县| 石棉县| 沛县| 城步| 隆回县| 沁水县| 来宾市| 桓仁|