java 8新特性(一)

來源:互聯網
上載者:User

標籤:

Java 8出來有很長一段時間了,由於之前一直在搞Ruby都沒時間好好學習下,趁著有空整理一下

http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html

這裡我們主要看程式設計語言相關的新特性:

Lambda運算式:

        現在的匿名類有一個問題就是,當一個匿名類的實現非常簡單,如一個介面只包含了唯一一個抽象方法,它的匿名類實現在解析的時候是笨重的且不清晰的。在這種情況下,我們通常會嘗試將功能的實現當做另一個方法的參數傳入,比如swing中當點擊一個按鈕,需要做的處理動作。Lambda運算式允許你這麼做,將功能作為方法參數或者將代碼作為資料。這個特性是屬於函數式編程的特性,將一個代碼塊作為參數傳入,如果學習過ruby的哈應該很好理解,與ruby的lambda運算式很類似。下面看一下官方給出的例子(由於例子太長,只展示重要部分,有興趣可以自己去上面的地址看):

沒有用Lambda運算式之前:

printPersons(    roster,    new CheckPerson() {        public boolean test(Person p) {            return p.getGender() == Person.Sex.MALE                && p.getAge() >= 18                && p.getAge() <= 25;        }    });

用了之後:

printPersons(    roster,    (Person p) -> p.getGender() == Person.Sex.MALE        && p.getAge() >= 18        && p.getAge() <= 25);

可以看出用了Lambda之後字需要給出方法實現的代碼即可,簡潔了不少,代碼嵌套也少了兩層,如果實現代碼有多行時,需要在 ->後面使用{}同時最後必須有return,同時參數的類型也可以省略,Java編譯器可以根據方法定義自動推匯出參數類型。

介面的預設方法:

    Java 8 允許在介面中定義非抽象的方法,需要用關鍵字default,叫做介面的預設方法或者擴充方法,這種方法可以定義多個。

具體代碼如下:

public interface Parser {    String getResult(String info);    default String notKnow() {        return "Sorry I do‘t know!";    }    default String anotherOne() {        return "another one";    }}

public class AgeParser implements Parser {      @Override    public String getResult(String info) {        if (info.matches("How old are you")) {            return "I‘m 23";        } else {            return notKnow();        }    }    public static void main(String[] args) {        AgeParser parser = new AgeParser();        System.out.println(parser.getResult("How old are you"));        System.out.println(parser.getResult("You do‘t know"));        System.out.println(parser.anotherOne());    }}

預設方法在介面的實作類別中可以直接使用不需要重寫,當然也是可以在實作類別中重寫這個方法的,同時,如果其他的介面繼承了這個介面,那麼預設方法也會被繼承,同時可以在介面中重寫預設方法。

函數式介面:

        在上面Lambda運算式中,曾提出過一個介面只包含了唯一一個抽象方法(可以同時包含多個預設方法),這個介面被叫做函數式介面,也只有函數式介面才能使用Lambda運算式建立其對應的匿名內部類的執行個體,同時為了確保介面一定滿足函數式介面的要求,可以在介面申明的上面加上@FunctionalInterface註解,如果不滿足要求,如抽象方法多餘一個,就會編譯不過。

java 8新特性(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.