亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解

 更新時(shí)間:2022年10月29日 11:28:28   作者:奔跑吧雞翅  
這篇文章主要為大家介紹了Kotlin?標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

標(biāo)準(zhǔn)函數(shù)

with

with 的作用是可以在連續(xù)調(diào)用同一對(duì)象的多個(gè)方法時(shí)讓代碼變得更加精簡(jiǎn)

val result = with(obj){
	//這里是obj的上下文
	"value" //with 函數(shù)的返回值
}

看個(gè)例子,例如有一個(gè)水果列表,現(xiàn)在我們想吃完所有水果,并將結(jié)果打印出來(lái)

val list = listOf("Apple","Banana","Orange")
val builder = StringBuilder()
builder.append("Start eating fruits\n")
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 讓代碼更簡(jiǎn)單

		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 函數(shù)第一個(gè)參數(shù)傳入 StringBuilder 對(duì)象,那么接下來(lái)整個(gè) Lambda 表達(dá)式的上下文就是這個(gè) StringBuilder。Lambda 表達(dá)式最后一行代碼會(huì)作為 with 函數(shù)的返回值返回

run

首先 run 函數(shù)是不能直接調(diào)用的,而是一定要調(diào)用某個(gè)對(duì)象的 run 函數(shù)才行;其次 run 函數(shù)只接收一個(gè) Lambda 函數(shù),并且會(huì)在 Lambda 表達(dá)式中提供調(diào)用對(duì)象的上下文

val result = obj.run{
	//這里是obj的上下文
	"value"http://run函數(shù)的返回值
}
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

apply 函數(shù)和 run 函數(shù)極其類似,只不過無(wú)法指定返回值,而是會(huì)自動(dòng)返回調(diào)用對(duì)象本身

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 對(duì)啟動(dòng) Activity 的代碼進(jìn)行優(yōu)化,傳遞的參數(shù)越多,這種寫法越有優(yōu)勢(shì)

val intent = Intent(this,SecondActivity::class.java).apply { 
	putExtra("param1","data1")
	putExtra("param2","data2")
}
startActivity(intent)

定義靜態(tài)方法

在 Java 中定義一個(gè)靜態(tài)方法非常簡(jiǎn)單,只需要在方法前聲明 static 關(guān)鍵字即可

public class Util{
	public static void doAction(){
		System.out.println("do action");
	}
}

調(diào)用的時(shí)候

Util.doActin();

靜態(tài)方法非常適合編寫一些工具類的功能,因?yàn)楣ぞ哳愅ǔ]有創(chuàng)建實(shí)例的必要。而 Kotlin 中推薦使用單例類的方法來(lái)實(shí)現(xiàn),例如上述 Util 工具類

object Util {
    fun doAction(){
        println("do action")
    }
}

調(diào)用的時(shí)候

Util.doAction()

不過使用單例類的寫法會(huì)將整個(gè)類的所有方法全部變成類似于靜態(tài)方法的調(diào)用方式,而如果我們只想讓類中某個(gè)方法變成靜態(tài)方法的調(diào)用方式:

class Util {
    fun doAction1(){
        println("do action1")
    }
    companion object{
        fun doAction2(){
            println("do action2")
        }
    } 
}

我們將 Util 變成一個(gè)普通類,doAction1() 方法一定要?jiǎng)?chuàng)建 Util 類的實(shí)例才能調(diào)用,而 doAction2() 可以使用 Util.doAction2() 的方式調(diào)用。doAction2() 方法其實(shí)也不是靜態(tài)方法,companion object 關(guān)鍵字實(shí)際上會(huì)在 Util 類內(nèi)創(chuàng)建一個(gè)伴生類,而 doAction2() 方法就是定義在這個(gè)伴生類里面的實(shí)例方法,只是 Kotlin 會(huì)保證 Util 類始終只會(huì)存在一個(gè)伴生類對(duì)象,因此調(diào)用 Util.doAction2() 方法實(shí)際上就是調(diào)用了 Util 類中伴生對(duì)象的 Util.doAction2() 方法

由此可見 Kotlin 確實(shí)沒有直接定義靜態(tài)方法的關(guān)鍵字,而是提供了一些語(yǔ)法特性來(lái)支持類似靜態(tài)方法調(diào)用的寫法,然而如果你確確實(shí)實(shí)需要定義真正的靜態(tài)方法,Kotlin 仍然提供了兩張實(shí)現(xiàn)方式:注解和頂層方法

注解

如果我們給單例類或 Companion object 中的方法加上 @JvmStatic 注解,那么 Kotlin 編譯器就會(huì)將這些方法編譯成真正的靜態(tài)方法:

class Util {
    fun doAction1(){
        println("do action1")
    }
    companion object{
        @JvmStatic
        fun doAction2(){
            println("do action2")
        }
    }
}

注意@JvmStatic注解只能加到單例類或 companion object 中方法上。由于 doAction2() 方法已經(jīng)成為真正的靜態(tài)方法,不管在 Kotlin 還是 Java 中都可以使用 Util.doAction2() 的寫法來(lái)調(diào)用了

頂層方法

頂層方法指的是那些沒有定義在任何類中的方法,例如 main() 方法。Kotlin 編譯器會(huì)將所有頂層方法全部編譯成靜態(tài)方法。所以如果你定義了一個(gè)頂層方法,那么它就一定是靜態(tài)方法

現(xiàn)在創(chuàng)建一個(gè) Helper.kt 的 File

現(xiàn)在在這個(gè)文件里定義的任何方法都是頂級(jí)方法

fun doSomething(){
    println("do something")
}

所有的頂層方法都可以在任何位置被直接調(diào)用,不用管包名路徑,也不用創(chuàng)建實(shí)例,直接輸入方法名即可:doSomething()。而在 Java 中不同了。Kotlin 編譯器會(huì)自動(dòng)創(chuàng)建一個(gè) HelperKt 的 Java 類,所以使用 HelpterKt.doSomething()即可

classJavaTest {
    public void invokeStaticMethod(){
        HelperKt . doSome thing();
    }
}

以上就是Kotlin 標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Kotlin 標(biāo)準(zhǔn)函數(shù)靜態(tài)方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類用法示例

    Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類用法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的獲取和判斷文件頭信息工具類,結(jié)合實(shí)例形式分析了Java針對(duì)文件讀取及頭信息判斷相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • SpringBoot集成支付寶支付的實(shí)現(xiàn)示例

    SpringBoot集成支付寶支付的實(shí)現(xiàn)示例

    本文主要介紹了SpringBoot集成支付寶支付的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解Java 中的UnitTest 和 PowerMock

    詳解Java 中的UnitTest 和 PowerMock

    這篇文章主要介紹了Java中的 UnitTest 和 PowerMock,文中講解非常詳細(xì),對(duì)大家學(xué)習(xí)有很大的幫助,感興趣的朋友可以了解下
    2020-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之順序表詳解

    Java數(shù)據(jù)結(jié)構(gòu)之順序表詳解

    這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之順序表詳解,線性表在邏輯上是線性結(jié)構(gòu),也就說(shuō)是連續(xù)的一條直線。但是在物理結(jié)構(gòu)上并不一定是連續(xù)的,線性表在物理上存儲(chǔ)時(shí),通常以數(shù)組和鏈?zhǔn)浇Y(jié)構(gòu)的形式存儲(chǔ),需要的朋友可以參考下
    2023-07-07
  • SpringBoot指標(biāo)監(jiān)控功能實(shí)現(xiàn)

    SpringBoot指標(biāo)監(jiān)控功能實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot指標(biāo)監(jiān)控功能實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Springboot2.3.x整合Canal的示例代碼

    Springboot2.3.x整合Canal的示例代碼

    canal是阿里開源mysql?binlog?數(shù)據(jù)組件,canal-server?才是canal的核心我們前邊所講的canal的功能,實(shí)際上講述的就是canal-server的功能,本文給大家介紹Springboot2.3.x整合Canal的示例代碼,需要的朋友可以參考下
    2022-02-02
  • 解決spring AOP中自身方法調(diào)用無(wú)法應(yīng)用代理的問題

    解決spring AOP中自身方法調(diào)用無(wú)法應(yīng)用代理的問題

    這篇文章主要介紹了解決spring AOP中自身方法調(diào)用無(wú)法應(yīng)用代理的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot中讀取配置的七種方法總結(jié)

    SpringBoot中讀取配置的七種方法總結(jié)

    在Spring Boot應(yīng)用中,讀取配置是一項(xiàng)基礎(chǔ)且重要的任務(wù),Spring Boot提供了多種靈活的方式來(lái)讀取配置,以滿足不同場(chǎng)景下的需求,本文將詳細(xì)介紹Spring Boot中讀取配置的幾種常用方法,需要的朋友可以參考下
    2024-08-08
  • Java遺傳算法之沖出迷宮

    Java遺傳算法之沖出迷宮

    這篇文章首先詳細(xì)介紹了什么是遺傳算法,然后通過遺傳算法的思想用實(shí)例解析使用遺傳算法解決迷宮問題,需要的朋友可以參考下
    2017-09-09
  • Java中計(jì)算時(shí)間差的方法

    Java中計(jì)算時(shí)間差的方法

    這篇文章主要介紹了Java中計(jì)算時(shí)間差的方法,實(shí)例分析了java常見的三種計(jì)算時(shí)間差的技巧,需要的朋友可以參考下
    2015-06-06

最新評(píng)論