极速11选5
   
 
JAVA技術
  當前位置:首頁 > 技術支持 > JAVA技術
JAVA 8 ''::'' 關鍵字
發布時間:2019-09-29 瀏覽:108次
  

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):

@FunctionalInterface

interface IConvert<F, T> {

    T convert(F form);

}

(@FunctionalInterface 注解要求接口有且只有一個抽象方法,JDK中有許多類用到該注解,比如 Runnable,它只有一個 Run 方法。)

觀察接口 IConvert,傳參為類型 F,返回類型 T。所以,我們可以這樣訪問類Something的方法:

訪問靜態方法:

// 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");

訪問構造方法:

 // constructor methods

IConvert<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能準確地匹配到相應方法。

 
 
    
 
 
版權所有 © 2005-2019 安徽省艾佳信息技術有限公司 极速11选5  皖公網安備 34019202000659號
地址:安徽省合肥市高新區天元路1號留學人員創業園1號樓205 電話:0551-64935878 郵箱:[email protected]