Java8中新增的函數(shù)式編程
使用? '::'? 引用代表的都是一個(gè)執(zhí)行過(guò)程乌庶,即一個(gè)方法杭朱,而非方法執(zhí)行后獲得的實(shí)例
1. 可通過(guò)兩個(gè)冒號(hào)來(lái)實(shí)現(xiàn)對(duì)某個(gè)類的方法類型進(jìn)行引用(引用的是類型,并非方法的執(zhí)行結(jié)果)
? ? ? ?a.? 若引用當(dāng)前類中的方法的類型瘫拣,可直接使用'::XXX'格式進(jìn)行引用(注意,方法名后沒(méi)有括號(hào))
? ? ? ?b. 或使用某對(duì)象加'::'來(lái)引用某實(shí)例對(duì)象的方法(形如a::bb)
? ? ? ? 注意:XXX()? ?和? ?::XXX 的執(zhí)行效果完全不同,XXX()為調(diào)用了一個(gè)函數(shù)亲茅,會(huì)真正執(zhí)行,而::XXX僅聲明了一種類型狗准,由于未給任何變量賦值克锣,即無(wú)法使用,編譯時(shí)應(yīng)該會(huì)被去掉吧腔长?
? ???????故:此種引用方式似乎除了高階函數(shù)中使用沒(méi)有別的用了袭祟?
2. 可以通過(guò)這種語(yǔ)法來(lái)定義一個(gè)類的構(gòu)造方法引用變量
? ??例:class Book(name:String){}
? ? ? ? ? ? val getBool=::Book(此處引用的是Book的構(gòu)造方法的類型,getBook的類型為(name:String)->Book)
? ? ? ? ? ? 使用:getBook("name of Book").name? 此時(shí)得到的是一個(gè)Book對(duì)象的name字段對(duì)應(yīng)的字符捞附,即 ‘name of book’巾乳。
? ? 其他示例:
此處Book::name 是一個(gè)(Book)->String 類型的函數(shù),即map()此處應(yīng)該是個(gè)高階函數(shù)
? ? 使用:‘::’只表示引用其類型鸟召,與函數(shù)相關(guān)胆绊,只用于聲明類型,不能企圖獲取其執(zhí)行后的結(jié)果欧募,若要獲取執(zhí)行結(jié)果压状,需要再通過(guò)調(diào)用聲明的變量實(shí)現(xiàn)。與變量相關(guān)槽片,獲取到的為一個(gè)函數(shù)類型定義何缓,非具體值肢础,無(wú)法獲取變量?jī)?nèi)容,需要使用'.'連接符碌廓,可以通過(guò)調(diào)用構(gòu)造過(guò)程后通過(guò)‘.'連接符獲取類變量值