JAVA 8 '::' 關(guān)鍵字詳解
Java 8 中我們可以通過 `::` 關(guān)鍵字來訪問類的構(gòu)造方法,對象方法,靜態(tài)方法。
現(xiàn)有一個類 Something
class Something { // constructor methods Something() {} Something(String something) { System.out.println(something); } // static methods static String startsWith(String s) { return String.valueOf(s.charAt(0)); } // object methods String endWith(String s) { return String.valueOf(s.charAt(s.length()-1)); } void endWith() {} }
如何用 '::' 來訪問類Something中的方法呢?先定義一個接口,因為必須要用 functional interface 來接收,否則編譯錯誤(The target type of this expression must be a functional interface)
@FunctionalInterface interface IConvert<F, T> { T convert(F form); }
(@FunctionalInterface 注解要求接口有且只有一個抽象方法,JDK中有許多類用到該注解,比如 Runnable,它只有一個 Run 方法。)
觀察接口 IConvert,傳參為類型 F,返回類型 T。所以,我們可以這樣訪問類Something的方法:
訪問靜態(tài)方法
// static methods IConvert<String, String> convert = Something::startsWith; String converted = convert.convert("123")
訪問對象方法
// object methods Something something = new Something(); IConvert<String, String> converter = something::endWith; String converted = converter.convert("Java");
訪問構(gòu)造方法
// constructor methods IConvert<String, Something> convert = Something::new; Something something = convert.convert("constructors");
總結(jié)
我們可以把類Something中的方法static String startsWith(String s){...}、String endWith(String s){...}、Something(String something){...}看作是接口IConvert的實現(xiàn),因為它們都符合接口定義的那個“模版”,有傳參類型F以及返回值類型T。比如構(gòu)造方法Something(String something),它傳參為String類型,返回值類型為Something。注解@FunctionalInterface保證了接口有且僅有一個抽象方法,所以JDK能準(zhǔn)確地匹配到相應(yīng)方法。
到此這篇關(guān)于JAVA 8 '::' 關(guān)鍵字的文章就介紹到這了,更多相關(guān)JAVA 8 '::' 關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 部署過程解析(jar or war)
這篇文章主要介紹了Spring Boot 部署過程解析(jar or war),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09springboot通過spel結(jié)合aop實現(xiàn)動態(tài)傳參的案例
SpEl 是Spring框架中的一個利器,Spring通過SpEl能在運行時構(gòu)建復(fù)雜表達(dá)式、存取對象屬性、對象方法調(diào)用等,今天通過本文給大家介紹springboot?spel結(jié)合aop實現(xiàn)動態(tài)傳參,需要的朋友可以參考下2022-07-07Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢分享
這篇文章主要給大家介紹了關(guān)于Java線程狀態(tài)及切換、關(guān)閉線程的正確姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10SpringAop中AspectJ框架的切入點表達(dá)式
這篇文章主要介紹了SpringAop中AspectJ框架的切入點表達(dá)式,AspectJ是一個基于Java語言的AOP框架,Spring2.0以后新增了對AspectJ切點表達(dá)式支持,@AspectJ 是AspectJ1.5新增功能,通過JDK5注解技術(shù),允許直接在Bean類中定義切面,需要的朋友可以參考下2023-08-08IntelliJ IDEA 15款超級牛逼插件推薦(自用,超級牛逼)
這篇文章主要給大家推薦介紹了IntelliJ IDEA 15款超級牛逼插件,這15款插件都是自用的,真的非常推薦,需要的朋友可以參考下2020-11-11

Springboot pom項目間接依賴包版本與預(yù)期不符原因解決分析