欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java的lambda表達式實現解析

 更新時間:2017年06月22日 10:08:17   作者:簡單備忘錄  
這篇文章主要為大家詳細介紹了Java的lamda表達式實現,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Java8引入了lambda表達式。lambda表達式并不是新功能,只是為了方便代碼編寫的語法糖。

但,即便是在其他語言已經司空見慣的lambda表達式,如果在Java中要支持它,還需要考慮各種向下兼容的問題。

簡單的說,Java的lambda表達式支持,大約需要考慮2個方面

  • 需要支持lambda語法,以替代原有的方法匿名類
  • 需要考慮已有JDK中,如何增加新操作以支持lambda表達式

對于第一點的回答是FuntionalInterface的Annotation,第二點的回答是default方法。

FunctionalInteface

通過在一個interface上增加@FunctionalInterface, 表示這個接口是特殊interface。其特殊性體現在

  1. 該interface只能有一個抽象方法等待子類實現
  2. 之后,此interface對應的對象,可以是lambda表達式
  3. lambda表達式必須與此interface中唯一的抽象方法簽名相一致
@FunctionalInterface
public interface ITest {
  void sayHello(String name); 
}

public class Testlambda {
    public static String name = "test";
    public static void testRun2(ITest test){
      test.sayHello(name);
    }
    public static void main(String[] args) {
      testRun2(test->System.out.println(test));
    }
}

Default方法

default方法只能在interface中聲明。default方法使得interface也可以定義已經實現的方法。那么問題來了。interface為什么一定需要這個特性?java的interface不就是應該都只有抽象方法嗎?

考慮一下這個例子

List<Integer> alist = new ArrayList<Integer>();
alist.add(1);
alist.add(2);
alist.add(3);
alist.add(4);
alist.forEach((s)->System.out.println(s));  

List是JDK java.util的一個接口。此接口由來已久。如果要在其中引入forEach方法,而且支持使用lambda表達式,必須對List進行一些改變。但是,JDK要向下兼容,一旦對已知的List增加接口,勢必無法保證兼容性。所以,出于這個原因,想辦法增加了default方法。這使得一個接口可以定義默認方法,以保全JDK原有的接口可以繼續(xù)向下兼容。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 解決for循環(huán)為空不需要判斷的問題

    解決for循環(huán)為空不需要判斷的問題

    這篇文章主要介紹了解決for循環(huán)為空不需要判斷的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java并發(fā)之Phaser的全面解析詳解

    Java并發(fā)之Phaser的全面解析詳解

    Phaser是Java中一個靈活的同步工具,其優(yōu)點在于支持多階段的任務拆分與同步,并且能夠動態(tài)地注冊與注銷參與者,下面我們就來深入了解一下Phaser的應用吧
    2024-02-02
  • Java工廠模式定義與用法實例分析

    Java工廠模式定義與用法實例分析

    這篇文章主要介紹了Java工廠模式定義與用法,結合具體實例形式分析了java工廠模式定義、使用相關操作技巧,并總結了類圖原理,需要的朋友可以參考下
    2019-07-07
  • Java中的Optional類用法詳細講解

    Java中的Optional類用法詳細講解

    這篇文章詳細介紹了Java中Optional類的使用,包括創(chuàng)建Optional對象,Optional對象的常用方法,如get、orElse、orElseGet、orElseThrow等,以及Optional類結合Lambda表達式和StreamAPI的使用,需要的朋友可以參考下
    2024-10-10
  • JAVA中使用FTPClient實現文件上傳下載實例代碼

    JAVA中使用FTPClient實現文件上傳下載實例代碼

    本文給大家介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實現上傳下載文件。非常不錯具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-06-06
  • java8中的lambda表達式簡介

    java8中的lambda表達式簡介

    Lambda表達式類似匿名函數,簡單地說,它是沒有聲明的方法,也即沒有訪問修飾符、返回值聲明和方法名,這篇文章主要介紹了java8?中的lambda表達式簡介,需要的朋友可以參考下
    2022-06-06
  • springcloud項目里application.yml不加載的坑及解決

    springcloud項目里application.yml不加載的坑及解決

    這篇文章主要介紹了springcloud項目里application.yml不加載的坑及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • WebSocket實現聊天室業(yè)務

    WebSocket實現聊天室業(yè)務

    這篇文章主要為大家詳細介紹了WebSocket實現聊天室業(yè)務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • 用java實現楊輝三角的示例代碼

    用java實現楊輝三角的示例代碼

    本篇文章主要介紹了用java實現楊輝三角的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java語法基礎之選擇結構的if語句、switch語句詳解

    Java語法基礎之選擇結構的if語句、switch語句詳解

    這篇文章主要為大詳細介紹了Java語法基礎之選擇結構的if語句、switch語句,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論