JAVA技術
  當前位置:首頁 > 技術支持 > JAVA技術
JAVA 8 ''::'' 關鍵字
發布時(shí)間:2019-09-29 浏覽:3116次
  

Java 8 中我們可(kě)以通(tōng)過 `::` 關鍵字來(lái)訪問類的(de)構造方法,對(duì)象方法,靜态方法。

現有一個(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() {}

}

如何用(yòng) ''::'' 來(lái)訪問類Something中的(de)方法呢(ne)?先定義一個(gè)接口,因爲必須要用(yòng) functional interface 來(lái)接收,否則編譯錯誤(The target type of this expression must be a functional interface):

@FunctionalInterface

interface IConvert<F, T> {

    T convert(F form);

}

(@FunctionalInterface 注解要求接口有且隻有一個(gè)抽象方法,JDK中有許多(duō)類用(yòng)到該注解,比如 Runnable,它隻有一個(gè) Run 方法。)

觀察接口 IConvert,傳參爲類型 F,返回類型 T。所以,我們可(kě)以這(zhè)樣訪問類Something的(de)方法:

訪問靜态方法:

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

訪問構造方法:

 // constructor methods

IConvert<String, Something> convert = Something::new;

Something something = convert.convert("constructors");

總結:我們可(kě)以把類Something中的(de)方法static String startsWith(String s){...}、String endWith(String s){...}、Something(String something){...}看作是接口IConvert的(de)實現,因爲它們都符合接口定義的(de)那個(gè)“模版”,有傳參類型F以及返回值類型T。比如構造方法Something(String something),它傳參爲String類型,返回值類型爲Something。注解@FunctionalInterface保證了(le)接口有且僅有一個(gè)抽象方法,所以JDK能準确地匹配到相應方法。

 
 
    
 
 
版權所有 © 2005-2024 安徽問法信息技術有限公司  
地址:安徽省合肥市蜀山區(qū)望江西路69号西湖國際廣場(chǎng) 電話(huà):0551-64935878 郵箱:admin@ajsoft.cn