溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

kotlin入門之標準函數與靜態方法

發布時間:2021-09-09 17:53:37 來源:億速云 閱讀:168 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關kotlin入門之標準函數與靜態方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

標準函數

首先我們介紹標準函數 with、run、apply,如果你了解javascript,那理解kotlin的標準函數width、run、apply那簡直不要太輕松。with、run、apply與javascript中的with的意義基本一模一樣,只是含有一些細微差別。

with

with它接收兩個參數,第一個參數可以是任意類型的對象,第二個參數是一個Lambda表達式。with函數會在Lambda表達式中提供第一個對象的上下文,可以直接使用對象的屬性或方法,而不需要帶上對象前綴。with函數會使用Lambda表達式中的最后一行代碼作為返回值返回。

val result = with(obj) {
	// 這里是obj的上下文環境
	doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}

run

run函數的用法與使用場景和with函數非常類似,只是做了些許改動。run函數無法直接調用,他需要在某個對象的基礎上去調用它;其次run函數值接收一個Lambda表達式作為參數,并且會在Lambda表達中提供調用對象的上下文,同樣將Lambda表達式中的最后一行代碼作為返回值。

val result = obj.run {
// 這里是obj的上下文環境
doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}

apply

apply函數和run函數在用法上基本一模一樣,唯一區別是apply函數不會將Lambda表達式中的最后一行作為參數返回,而是會返回對象本身.

val result = obj.apply {
// 這里是obj的上下文環境
	doSomething() // 調用obj的doSomething方法,無需 obj.doSomething() 這種形式調用
}
// result == obj

靜態方法

在java中定義一個靜態方法如下:

public class Util {
	public static void doSome() {
		// todo
	}
}

// 使用靜態方法
Util.doSome()

而Kotlin提供了幾種方式去實現類似java中的靜態方法

單例類實現靜態方法

// 聲明一個單例類
object Util {
	fun doSome() {
		// todo
	}
}
// 使用
Util.doSome()

伴生類實現靜態方法

單例類的寫法會讓類中的所有方法全部變成了類似靜態方法的調用形式,如果我們只是希望類中的某些方法變成靜態方法的調用形式怎么辦呢?kotlin給我們提供了伴生類 companion object。

class Utl {
	companion obj {
		fun doSome() {
		// todo
		}
	}
}

// 使用
Util.doSome()

這個關鍵字實際會在Util類的內部創建一個伴生類,Kotlin會保證一個類中只會存在一個伴生類對象,調用Util.doSome()實際上是調用Util類中的伴生類對象的doSome方法。

注解實現靜態方法

如果我們確確實實需要定義真正的靜態方法,我們可以給單例類或companion object伴生類中的方法加上 @JvmStatic注解,那么kotlin編譯器就會將這些方法編譯成真正的靜態方法。注意這個注釋一般加在單例類或伴生類的方法上,如果加在普通方法上,會直接提示語法錯誤。

class Utl {
	companion obj {
		@JvmStatic
		fun doSome() {
		// todo
		}
	}
}

// 使用
Util.doSome()

頂層方法實現靜態方法

頂層方法指的是哪些沒有定義在任何類中的方法,比如我們編寫的main()方法。kotlin編譯器會將所有的頂層方法全部編譯成靜態方法。所有的頂層方法在任何位置可以直接被調用,不用管包名路徑,也不用創建實例。但如果這個方法在Java代碼中調用,需要加上該方法所在的文件名。

// 如我們在Tool.kt 文件中創建了一個頂層方法
// Tool.kt
fun doSome() {
	// todo
}

// 在java代碼中使用
public class JavaTest {
	public void invokeStaticFunc() {
		// 文件名+方法形式調用頂層方法
		Tool.doSome()
	}
}

看完上述內容,你們對kotlin入門之標準函數與靜態方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女