JAVA 8 '::' 關鍵字詳解
Java 8 中我們可以通過 `::` 關鍵字來訪問類的構造方法,對象方法,靜態方法。
現有一個類 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)
@FunctionalInterfaceinterface IConvert<F, T> { T convert(F form);}
(@FunctionalInterface 注解要求接口有且只有一個抽象方法,JDK中有許多類用到該注解,比如 Runnable,它只有一個 Run 方法。)
觀察接口 IConvert,傳參為類型 F,返回類型 T。所以,我們可以這樣訪問類Something的方法:
訪問靜態方法
// static methodsIConvert<String, String> convert = Something::startsWith;String converted = convert.convert('123')
訪問對象方法
// object methodsSomething something = new Something();IConvert<String, String> converter = something::endWith;String converted = converter.convert('Java');
訪問構造方法
// constructor methodsIConvert<String, Something> convert = Something::new;Something something = convert.convert('constructors');
總結
我們可以把類Something中的方法static String startsWith(String s){...}、String endWith(String s){...}、Something(String something){...}看作是接口IConvert的實現,因為它們都符合接口定義的那個“模版”,有傳參類型F以及返回值類型T。比如構造方法Something(String something),它傳參為String類型,返回值類型為Something。注解@FunctionalInterface保證了接口有且僅有一個抽象方法,所以JDK能準確地匹配到相應方法。
到此這篇關于JAVA 8 ’::’ 關鍵字的文章就介紹到這了,更多相關JAVA 8 ’::’ 關鍵字內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
