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

Java的lambda表達(dá)式實(shí)現(xiàn)解析

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

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

但,即便是在其他語(yǔ)言已經(jīng)司空見慣的lambda表達(dá)式,如果在Java中要支持它,還需要考慮各種向下兼容的問(wèn)題。

簡(jiǎn)單的說(shuō),Java的lambda表達(dá)式支持,大約需要考慮2個(gè)方面

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

對(duì)于第一點(diǎn)的回答是FuntionalInterface的Annotation,第二點(diǎn)的回答是default方法。

FunctionalInteface

通過(guò)在一個(gè)interface上增加@FunctionalInterface, 表示這個(gè)接口是特殊interface。其特殊性體現(xiàn)在

  1. 該interface只能有一個(gè)抽象方法等待子類實(shí)現(xiàn)
  2. 之后,此interface對(duì)應(yīng)的對(duì)象,可以是lambda表達(dá)式
  3. lambda表達(dá)式必須與此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也可以定義已經(jīng)實(shí)現(xiàn)的方法。那么問(wèn)題來(lái)了。interface為什么一定需要這個(gè)特性?java的interface不就是應(yīng)該都只有抽象方法嗎?

考慮一下這個(gè)例子

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的一個(gè)接口。此接口由來(lái)已久。如果要在其中引入forEach方法,而且支持使用lambda表達(dá)式,必須對(duì)List進(jìn)行一些改變。但是,JDK要向下兼容,一旦對(duì)已知的List增加接口,勢(shì)必?zé)o法保證兼容性。所以,出于這個(gè)原因,想辦法增加了default方法。這使得一個(gè)接口可以定義默認(rèn)方法,以保全JDK原有的接口可以繼續(xù)向下兼容。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

    Java工廠模式定義與用法實(shí)例分析

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

    Java中的Optional類用法詳細(xì)講解

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

    JAVA中使用FTPClient實(shí)現(xiàn)文件上傳下載實(shí)例代碼

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

    java8中的lambda表達(dá)式簡(jiǎn)介

    Lambda表達(dá)式類似匿名函數(shù),簡(jiǎn)單地說(shuō),它是沒(méi)有聲明的方法,也即沒(méi)有訪問(wèn)修飾符、返回值聲明和方法名,這篇文章主要介紹了java8?中的lambda表達(dá)式簡(jiǎn)介,需要的朋友可以參考下
    2022-06-06
  • springcloud項(xiàng)目里application.yml不加載的坑及解決

    springcloud項(xiàng)目里application.yml不加載的坑及解決

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

    WebSocket實(shí)現(xiàn)聊天室業(yè)務(wù)

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

    用java實(shí)現(xiàn)楊輝三角的示例代碼

    本篇文章主要介紹了用java實(shí)現(xiàn)楊輝三角的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句詳解

    Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句詳解

    這篇文章主要為大詳細(xì)介紹了Java語(yǔ)法基礎(chǔ)之選擇結(jié)構(gòu)的if語(yǔ)句、switch語(yǔ)句,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評(píng)論