JAVA 8 '::' 關(guān)鍵字詳解
Java 8 中我們可以通過 `::` 關(guān)鍵字來訪問類的構(gòu)造方法,對象方法,靜態(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")
訪問對象方法
// 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解析SpringSecurity自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問題
這篇文章主要介紹了SpringSecurity系列之自定義登錄驗(yàn)證成功與失敗的結(jié)果處理問題,本文通過實(shí)例給大家講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
解決idea2020 maven無法自動(dòng)導(dǎo)包的問題
這篇文章主要介紹了解決idea2020 maven無法自動(dòng)導(dǎo)包的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
java實(shí)現(xiàn)簡單的驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單的驗(yàn)證碼功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
java如何防止表單重復(fù)提交的注解@RepeatSubmit
@RepeatSubmit是一個(gè)自定義注解,用于防止表單重復(fù)提交,它通過AOP和攔截器模式實(shí)現(xiàn),結(jié)合了線程安全和分布式環(huán)境的考慮,注解參數(shù)包括interval(間隔時(shí)間)和message(提示信息),使用時(shí)需要注意并發(fā)處理、用戶體驗(yàn)、性能和安全性等方面,失效原因是多方面的2024-11-11
Springboot RestTemplate 簡單使用解析
這篇文章主要介紹了Springboot RestTemplate 簡單使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

