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ù)就屬于是一個標(biāo)準(zhǔn)函數(shù),經(jīng)常配合?.操作符來進(jìn)行判空處理
with函數(shù)
with函數(shù)接收兩個參數(shù),第一參數(shù)可以是任何類型的對象,第二個參數(shù)是一個Lambda表達(dá)式
with函數(shù)會在Lambda表達(dá)式中提供第一個參數(shù)的上下文,并使用Lambda表達(dá)式的最后一行代碼作為函數(shù)的返回值
示例代碼
val res = with(obj) {
//這里是obj對象的上下文
"value"http://這里是with函數(shù)的返回值
}
with函數(shù)的作用.假如現(xiàn)在有個需求讓吃完所有的水果并且將結(jié)果打印出來,代碼可以這樣寫
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ù)可以這樣寫,可以看到在Lambda表達(dá)式中,都是StringBuilder的上下文,那么就不需要我們通過StringBuilder的實例調(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ù)基本類似,區(qū)別就是,run函數(shù)不能直接調(diào)用,需要在某個對象的基礎(chǔ)上進(jìn)行調(diào)用
- 其次run函數(shù)只接受一個Lambda參數(shù),并且在Lambda表達(dá)式中提供調(diào)用對象的上下文.
- 其他和with函數(shù)都是一樣的
- 使用run函數(shù)完成上述需求的實例
fun runTest() {
val list = listOf<String>("Apple", "Banana", "Pear")
//將StringBuilder調(diào)出來,用來調(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ù)實例
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)方法又叫做類方法,就是說不需要實例,直接用類就可以進(jìn)行調(diào)用,一般會將工具類中的方法設(shè)置為靜態(tài)方法,方便調(diào)用
- 在java當(dāng)中的靜態(tài)方法就是使用static關(guān)鍵字修飾的方法
- 但是在kotlin當(dāng)中沒有直接的靜態(tài)方法
單例類
在kotlin當(dāng)中要是想要定義一個工具類,會比較推薦單例類進(jìn)行實現(xiàn)
object Util {
fun doAction() {
println("do something")
}
}
雖然單例類中的doAction()方法并不是靜態(tài)放啊,但是我們還是可以直接使用Util.doAction()來進(jìn)行調(diào)用
但是單例類的缺點是單例類中的方法都是類似靜態(tài)方法這種調(diào)用方式,但是我們只需要讓類中的一個方法變成靜態(tài)的怎么辦?
companion object
在companion object中定義的方法就可以類似于靜態(tài)方法那樣進(jìn)行調(diào)用了
class Util {
//非靜態(tài)方法屬性
fun doAction1() {
}
//擁有靜態(tài)方法的屬性
companion object {
fun doAction2() {
}
}
}
注解
單例類和companion object都是在語法形式上模仿了靜態(tài)方法,實際上不屬于真正的靜態(tài)方法
如果我們給單例類或者companion object中的方法加上@JvmStatic注解,那么kotlin編譯器就會將這些方法編譯成為真正的靜態(tài)方法
如下
class Util {
//非靜態(tài)方法屬性
fun doAction1() {
}
//擁有靜態(tài)方法的屬性
companion object {
@JvmStatic
fun doAction2() {
}
}
}
@JvmStatic只能加在單例類或者companion object中的方法
頂層方法
- 頂層方法指的就是沒有定義在任何類中的方法,kotlin編譯器會將所有的頂層方法編譯成為靜態(tài)方法
- 因此只要定義了一個頂層方法,那么他肯定是一個靜態(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Flutter桌面開發(fā)windows插件開發(fā)
這篇文章主要為大家介紹了Flutter桌面開發(fā)windows插件開發(fā)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android ImageView 固定寬高比例的實現(xiàn)方法
這篇文章主要介紹了Android ImageView 固定寬高比例的實現(xiàn)方法的相關(guān)資料,,方法一:設(shè)置 adjustViewBounds="true",方法二:使用 Universal-Image-Loader 圖片緩存類,需要注意的是方法二和方法一同時使用導(dǎo)致設(shè)置無效,需要的朋友可以參考下2017-07-07
Android和JavaScript相互調(diào)用的方法
這篇文章主要介紹了Android和JavaScript相互調(diào)用的方法,實例分析了Android的WebView執(zhí)行JavaScript及JavaScript訪問Android的技巧,需要的朋友可以參考下2015-12-12
Android應(yīng)用中使用DOM方式解析XML格式數(shù)據(jù)的基本方法
這篇文章主要介紹了Android應(yīng)用中使用DOM方式解析XML格式數(shù)據(jù)的基本方法,值得注意的是DOM方式解析的效率并不高,在數(shù)據(jù)量大的時候并不推薦使用,需要的朋友可以參考下2016-04-04
Android實現(xiàn)手勢滑動多點觸摸放大縮小圖片效果
這篇文章主要介紹了Android實現(xiàn)手勢滑動多點觸摸放大縮小圖片效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-02-02
Android開發(fā)實現(xiàn)仿京東商品搜索選項卡彈窗功能
這篇文章主要介紹了Android開發(fā)實現(xiàn)仿京東商品搜索選項卡彈窗功能,涉及Android布局及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-11-11
Android編程實現(xiàn)禁止?fàn)顟B(tài)欄下拉的方法詳解
這篇文章主要介紹了Android編程實現(xiàn)禁止?fàn)顟B(tài)欄下拉的方法,結(jié)合實例形式詳細(xì)分析了Android狀態(tài)欄操作相關(guān)的函數(shù)、屬性調(diào)用及權(quán)限控制設(shè)置技巧,需要的朋友可以參考下2017-08-08

