Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法應(yīng)用詳解
標(biāo)準(zhǔn)函數(shù)
- 標(biāo)準(zhǔn)函數(shù)就是在Standard.kt文件中定義的函數(shù),任何Kotlin代碼都可以自由地調(diào)用所有的標(biāo)準(zhǔn)函數(shù)
- let函數(shù)就屬于是一個(gè)標(biāo)準(zhǔn)函數(shù),經(jīng)常配合?.操作符來(lái)進(jìn)行判空處理
with函數(shù)
with函數(shù)接收兩個(gè)參數(shù),第一參數(shù)可以是任何類(lèi)型的對(duì)象,第二個(gè)參數(shù)是一個(gè)Lambda表達(dá)式
with函數(shù)會(huì)在Lambda表達(dá)式中提供第一個(gè)參數(shù)的上下文,并使用Lambda表達(dá)式的最后一行代碼作為函數(shù)的返回值
示例代碼
val res = with(obj) { //這里是obj對(duì)象的上下文 "value"http://這里是with函數(shù)的返回值 }
with函數(shù)的作用.假如現(xiàn)在有個(gè)需求讓吃完所有的水果并且將結(jié)果打印出來(lái),代碼可以這樣寫(xiě)
fun main() { doSomething() } fun doSomething() { val list = listOf<String>("Apple", "Banana", "Pear") val sb = StringBuilder() sb.append("Start eating fruits.\n") for (fruits in list) { sb.append(fruits).append("\n") } sb.append("Ate all fruits.") val res = sb.toString() println(res) }
利用with函數(shù)可以這樣寫(xiě),可以看到在Lambda表達(dá)式中,都是StringBuilder的上下文,那么就不需要我們通過(guò)StringBuilder的實(shí)例調(diào)用append()方法了,而是直接使用append()方法即可.
fun withTest() { val list = listOf<String>("Apple", "Banana", "Pear") val res = with(StringBuilder()) { append("Start eating fruits.\n") for (fruits in list) { append(fruits) append("\n") } append("Ate all fruits.") toString()//最后一行就是函數(shù)的返回值 } println(res) }
run函數(shù)
- run函數(shù)和with函數(shù)基本類(lèi)似,區(qū)別就是,run函數(shù)不能直接調(diào)用,需要在某個(gè)對(duì)象的基礎(chǔ)上進(jìn)行調(diào)用
- 其次run函數(shù)只接受一個(gè)Lambda參數(shù),并且在Lambda表達(dá)式中提供調(diào)用對(duì)象的上下文.
- 其他和with函數(shù)都是一樣的
- 使用run函數(shù)完成上述需求的實(shí)例
fun runTest() { val list = listOf<String>("Apple", "Banana", "Pear") //將StringBuilder調(diào)出來(lái),用來(lái)調(diào)用run函數(shù) val res = StringBuilder().run { append("Start eating fruits.\n") for (fruits in list) { append(fruits) append("\n") } append("Ate all fruits.") toString() } println(res) }
apply函數(shù)
- apply函數(shù)和run函數(shù)基本一樣,就是apply函數(shù)不能指定返回值,只能返回調(diào)用調(diào)用者的本身
- apply函數(shù)實(shí)例
fun applyTest() { val list = listOf<String>("Apple", "Banana", "Pear") val res = StringBuilder().apply { append("Start eating fruits.\n") for (fruits in list) { append(fruits) append("\n") } append("Ate all fruits.") } println(res.toString()) }
靜態(tài)方法
- 靜態(tài)方法又叫做類(lèi)方法,就是說(shuō)不需要實(shí)例,直接用類(lèi)就可以進(jìn)行調(diào)用,一般會(huì)將工具類(lèi)中的方法設(shè)置為靜態(tài)方法,方便調(diào)用
- 在java當(dāng)中的靜態(tài)方法就是使用static關(guān)鍵字修飾的方法
- 但是在kotlin當(dāng)中沒(méi)有直接的靜態(tài)方法
單例類(lèi)
在kotlin當(dāng)中要是想要定義一個(gè)工具類(lèi),會(huì)比較推薦單例類(lèi)進(jìn)行實(shí)現(xiàn)
object Util { fun doAction() { println("do something") } }
雖然單例類(lèi)中的doAction()方法并不是靜態(tài)放啊,但是我們還是可以直接使用Util.doAction()來(lái)進(jìn)行調(diào)用
但是單例類(lèi)的缺點(diǎn)是單例類(lèi)中的方法都是類(lèi)似靜態(tài)方法這種調(diào)用方式,但是我們只需要讓類(lèi)中的一個(gè)方法變成靜態(tài)的怎么辦?
companion object
在companion object中定義的方法就可以類(lèi)似于靜態(tài)方法那樣進(jìn)行調(diào)用了
class Util { //非靜態(tài)方法屬性 fun doAction1() { } //擁有靜態(tài)方法的屬性 companion object { fun doAction2() { } } }
注解
單例類(lèi)和companion object都是在語(yǔ)法形式上模仿了靜態(tài)方法,實(shí)際上不屬于真正的靜態(tài)方法
如果我們給單例類(lèi)或者companion object中的方法加上@JvmStatic注解,那么kotlin編譯器就會(huì)將這些方法編譯成為真正的靜態(tài)方法
如下
class Util { //非靜態(tài)方法屬性 fun doAction1() { } //擁有靜態(tài)方法的屬性 companion object { @JvmStatic fun doAction2() { } } }
@JvmStatic只能加在單例類(lèi)或者companion object中的方法
頂層方法
- 頂層方法指的就是沒(méi)有定義在任何類(lèi)中的方法,kotlin編譯器會(huì)將所有的頂層方法編譯成為靜態(tài)方法
- 因此只要定義了一個(gè)頂層方法,那么他肯定是一個(gè)靜態(tài)方法
到此這篇關(guān)于Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法應(yīng)用詳解的文章就介紹到這了,更多相關(guān)Kotlin標(biāo)準(zhǔn)函數(shù)與靜態(tài)方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android開(kāi)發(fā)之無(wú)痕過(guò)渡下拉刷新控件的實(shí)現(xiàn)思路詳解
下拉刷新效果功能在程序開(kāi)發(fā)中經(jīng)常會(huì)見(jiàn)到,今天小編抽時(shí)間給大家分享Android開(kāi)發(fā)之無(wú)痕過(guò)渡下拉刷新控件的實(shí)現(xiàn)思路詳解,需要的朋友參考下吧2016-11-11Android實(shí)戰(zhàn)打飛機(jī)游戲之怪物(敵機(jī))類(lèi)的實(shí)現(xiàn)(4)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)打飛機(jī)游戲之怪物(敵機(jī))類(lèi)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07Android操作SQLite數(shù)據(jù)庫(kù)(增、刪、改、查、分頁(yè)等)及ListView顯示數(shù)據(jù)的方法詳解
這篇文章主要介紹了Android操作SQLite數(shù)據(jù)庫(kù)(增、刪、改、查、分頁(yè)等)及ListView顯示數(shù)據(jù)的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android操作SQLite數(shù)據(jù)庫(kù)及使用ListView顯示數(shù)據(jù)的相關(guān)技巧,需要的朋友可以參考下2016-02-02android實(shí)現(xiàn)將位置信息寫(xiě)入JPEG圖片文件
下面小編就為大家?guī)?lái)一篇android實(shí)現(xiàn)將位置信息寫(xiě)入JPEG圖片文件。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03