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

