kotlin快速入門之標準函數(shù)與靜態(tài)方法
標準函數(shù)
首先我們介紹標準函數(shù) with、run、apply,如果你了解javascript,那理解kotlin的標準函數(shù)width、run、apply那簡直不要太輕松。with、run、apply與javascript中的with的意義基本一模一樣,只是含有一些細微差別。
with
with它接收兩個參數(shù),第一個參數(shù)可以是任意類型的對象,第二個參數(shù)是一個Lambda表達式。with函數(shù)會在Lambda表達式中提供第一個對象的上下文,可以直接使用對象的屬性或方法,而不需要帶上對象前綴。with函數(shù)會使用Lambda表達式中的最后一行代碼作為返回值返回。
val result = with(obj) {
// 這里是obj的上下文環(huán)境
doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}
run
run函數(shù)的用法與使用場景和with函數(shù)非常類似,只是做了些許改動。run函數(shù)無法直接調用,他需要在某個對象的基礎上去調用它;其次run函數(shù)值接收一個Lambda表達式作為參數(shù),并且會在Lambda表達中提供調用對象的上下文,同樣將Lambda表達式中的最后一行代碼作為返回值。
val result = obj.run {
// 這里是obj的上下文環(huán)境
doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}
apply
apply函數(shù)和run函數(shù)在用法上基本一模一樣,唯一區(qū)別是apply函數(shù)不會將Lambda表達式中的最后一行作為參數(shù)返回,而是會返回對象本身.
val result = obj.apply {
// 這里是obj的上下文環(huán)境
doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}
// result == obj
靜態(tài)方法
在java中定義一個靜態(tài)方法如下:
public class Util {
public static void doSome() {
// todo
}
}
// 使用靜態(tài)方法
Util.doSome()
而Kotlin提供了幾種方式去實現(xiàn)類似java中的靜態(tài)方法
單例類實現(xiàn)靜態(tài)方法
// 聲明一個單例類
object Util {
fun doSome() {
// todo
}
}
// 使用
Util.doSome()
伴生類實現(xiàn)靜態(tài)方法
單例類的寫法會讓類中的所有方法全部變成了類似靜態(tài)方法的調用形式,如果我們只是希望類中的某些方法變成靜態(tài)方法的調用形式怎么辦呢?kotlin給我們提供了伴生類 companion object。
class Utl {
companion obj {
fun doSome() {
// todo
}
}
}
// 使用
Util.doSome()
這個關鍵字實際會在Util類的內部創(chuàng)建一個伴生類,Kotlin會保證一個類中只會存在一個伴生類對象,調用Util.doSome()實際上是調用Util類中的伴生類對象的doSome方法。
注解實現(xiàn)靜態(tài)方法
如果我們確確實實需要定義真正的靜態(tài)方法,我們可以給單例類或companion object伴生類中的方法加上 @JvmStatic注解,那么kotlin編譯器就會將這些方法編譯成真正的靜態(tài)方法。注意這個注釋一般加在單例類或伴生類的方法上,如果加在普通方法上,會直接提示語法錯誤。
class Utl {
companion obj {
@JvmStatic
fun doSome() {
// todo
}
}
}
// 使用
Util.doSome()
頂層方法實現(xiàn)靜態(tài)方法
頂層方法指的是哪些沒有定義在任何類中的方法,比如我們編寫的main()方法。kotlin編譯器會將所有的頂層方法全部編譯成靜態(tài)方法。所有的頂層方法在任何位置可以直接被調用,不用管包名路徑,也不用創(chuàng)建實例。但如果這個方法在Java代碼中調用,需要加上該方法所在的文件名。
// 如我們在Tool.kt 文件中創(chuàng)建了一個頂層方法
// Tool.kt
fun doSome() {
// todo
}
// 在java代碼中使用
public class JavaTest {
public void invokeStaticFunc() {
// 文件名+方法形式調用頂層方法
Tool.doSome()
}
}
總結
到此這篇關于kotlin快速入門之標準函數(shù)與靜態(tài)方法的文章就介紹到這了,更多相關kotlin標準函數(shù)與靜態(tài)方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
jdk17+springboot使用webservice的踩坑實戰(zhàn)記錄
這篇文章主要給大家介紹了關于jdk17+springboot使用webservice踩坑的相關資料,網上很多教程是基于jdk8的,所以很多在17上面跑不起來,折騰兩天,直接給答案,需要的朋友可以參考下2024-01-01
SpringBoot集成MybatisPlus報錯的解決方案
這篇文章主要介紹了SpringBoot集成MybatisPlus報錯的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12

