<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
with 的作用是可以在連續呼叫同一物件的多個方法時讓程式碼變得更加精簡
val result = with(obj){ //這裡是obj的上下文 "value" //with 函數的返回值 }
看個例子,例如有一個水果列表,現在我們想吃完所有水果,並將結果列印出來
val list = listOf("Apple","Banana","Orange") val builder = StringBuilder() builder.append("Start eating fruitsn") for(fruit in list){ builder.append(fruit).append("n") } builder.append("Ate all fruits.n") val result = builder.toString() print(result)
Start eating fruitsApple
Banana
Orange
Ate all fruits.
我們可以使用 with
讓程式碼更簡單
val list = listOf("Apple","Banana","Orange") val result = with(StringBuffer()){ append("Start eating fruit.n") for (fruit in list){ append(fruit+"n") } append("Ate all fruits.n") toString() } println(result)
我們給 with 函數第一個引數傳入 StringBuilder 物件,那麼接下來整個 Lambda 表示式的上下文就是這個 StringBuilder。Lambda 表示式最後一行程式碼會作為 with 函數的返回值返回
首先 run 函數是不能直接呼叫的,而是一定要呼叫某個物件的 run 函數才行;其次 run 函數只接收一個 Lambda 函數,並且會在 Lambda 表示式中提供呼叫物件的上下文
val result = obj.run{ //這裡是obj的上下文 "value"//run函數的返回值 }
val list = listOf("Apple","Banana","Orange") val result = StringBuilder().run{ append("Start eating fruit.n") for (fruit in list){ append(fruit+"n") } append("Ate all fruits.n") toString() } println(result)
apply 函數和 run 函數極其類似,只不過無法指定返回值,而是會自動返回撥用物件本身
val result = obj.apply{ //這裡是obj的上下文 } //result == obj
val list = listOf("Apple","Banana","Orange") val result = StringBuilder().apply{ append("Start eating fruit.n") for (fruit in list){ append(fruit+"n") } append("Ate all fruits.n") } println(result.toString())
我們可以使用 apply 對啟動 Activity 的程式碼進行優化,傳遞的引數越多,這種寫法越有優勢
val intent = Intent(this,SecondActivity::class.java).apply { putExtra("param1","data1") putExtra("param2","data2") } startActivity(intent)
在 Java 中定義一個靜態方法非常簡單,只需要在方法前宣告 static
關鍵字即可
public class Util{ public static void doAction(){ System.out.println("do action"); } }
呼叫的時候
Util.doActin();
靜態方法非常適合編寫一些工具類的功能,因為工具類通常沒有建立範例的必要。而 Kotlin 中推薦使用單例類的方法來實現,例如上述 Util 工具類
object Util { fun doAction(){ println("do action") } }
呼叫的時候
Util.doAction()
不過使用單例類的寫法會將整個類的所有方法全部變成類似於靜態方法的呼叫方式,而如果我們只想讓類中某個方法變成靜態方法的呼叫方式:
class Util { fun doAction1(){ println("do action1") } companion object{ fun doAction2(){ println("do action2") } } }
我們將 Util 變成一個普通類,doAction1() 方法一定要建立 Util 類的範例才能呼叫,而 doAction2() 可以使用 Util.doAction2() 的方式呼叫。doAction2() 方法其實也不是靜態方法,companion object
關鍵字實際上會在 Util 類內建立一個伴生類,而 doAction2() 方法就是定義在這個伴生類裡面的實體方法,只是 Kotlin 會保證 Util 類始終只會存在一個伴生類物件,因此呼叫 Util.doAction2() 方法實際上就是呼叫了 Util 類中伴生物件的 Util.doAction2() 方法
由此可見 Kotlin 確實沒有直接定義靜態方法的關鍵字,而是提供了一些語法特性來支援類似靜態方法呼叫的寫法,然而如果你確確實實需要定義真正的靜態方法,Kotlin 仍然提供了兩張實現方式:註解和頂層方法
如果我們給單例類或 Companion object 中的方法加上 @JvmStatic
註解,那麼 Kotlin 編譯器就會將這些方法編譯成真正的靜態方法:
class Util { fun doAction1(){ println("do action1") } companion object{ @JvmStatic fun doAction2(){ println("do action2") } } }
注意@JvmStatic
註解只能加到單例類或 companion object 中方法上。由於 doAction2() 方法已經成為真正的靜態方法,不管在 Kotlin 還是 Java 中都可以使用 Util.doAction2() 的寫法來呼叫了
頂層方法指的是那些沒有定義在任何類中的方法,例如 main() 方法。Kotlin 編譯器會將所有頂層方法全部編譯成靜態方法。所以如果你定義了一個頂層方法,那麼它就一定是靜態方法
現在建立一個 Helper.kt 的 File
現在在這個檔案裡定義的任何方法都是頂級方法
fun doSomething(){ println("do something") }
所有的頂層方法都可以在任何位置被直接呼叫,不用管包名路徑,也不用建立範例,直接輸入方法名即可:doSomething()
。而在 Java 中不同了。Kotlin 編譯器會自動建立一個 HelperKt 的 Java 類,所以使用 HelpterKt.doSomething()
即可
classJavaTest { public void invokeStaticMethod(){ HelperKt . doSome thing(); } }
以上就是Kotlin 標準函數和靜態方法範例詳解的詳細內容,更多關於Kotlin 標準函數靜態方法的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45