java8新增特性(二)----函式式介面(Functional)
阿新 • • 發佈:2019-01-30
上一篇部落格介紹了java8新增的Lambda表示式,這一節介紹一下java8的函數語言程式設計,兩者之間有什麼聯絡呢?請往下看~~~
Lambda表示式如何在java型別中表示的呢?
語言設計者投入了大量的精力來思考如何使現有的函式友好地支援lambda。最終採取的辦法是:增加函式式介面的概念,函式式介面介面就是具有一個方法的普通介面。像這樣的
介面可以被隱式的轉換為Lambda表示式!!!
每一個Lambda表示式都對應一個 型別,通常是介面型別。而“函式式介面”是指僅僅包含一個抽象方法的介面,每一個該型別的lambda表示式都會被匹配到這個抽象方法。
因為預設方法不算抽象方法,所以你也可以給你的函式式介面新增預設方法!!。。
我們可以把Lambda表示式當作任意一個抽象方法的介面型別,你的介面達到這個要求,你只需要給你的介面新增@FunctionalInterface註解,編譯器如果發現你標註了這個註解的介面有多於一個介面的時候會報錯!!!!
看一下下面函數語言程式設計的例子:
package com.panther.dong.java8.functional; /** * Created by panther on 15-8-22. */ public class FunctionTest { public static void main(String[] args) { Converter<String, Integer> converter = (from) -> Integer.parseInt(from); Integer integer = converter.convert("231"); System.out.println(integer); } } @FunctionalInterface interface Converter<F, T> { T convert(F from); }
執行結果:
231
注意:介面中的預設方法和靜態方法並不會影響函式式介面的規定,可以任意使用,但是普通方法只能有一個