最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Kotlin Extension Function擴(kuò)展函數(shù)詳細(xì)介紹

 更新時(shí)間:2023年02月17日 11:06:32   作者:破浪會(huì)有時(shí)  
Kotlin支持使用新功能擴(kuò)展類的能力,而無(wú)需通過類實(shí)現(xiàn)繼承概念或使用設(shè)計(jì)模式,如裝飾器(Decorator)。這是通過稱為擴(kuò)展功能(Extension Function)的特殊方式來(lái)完成的。因此,此功能可以有效地使代碼變得更清晰和易于閱讀,并且還可以減少代碼

Kotlin 語(yǔ)言支持使用新功能擴(kuò)展類的能力,而無(wú)需通過類實(shí)現(xiàn)繼承概念或使用設(shè)計(jì)模式,如裝飾器(Decorator)。 這是通過稱為擴(kuò)展功能(Extension Function)的特殊方式來(lái)完成的。 因此,此功能可以有效地使代碼變得更清晰和易于閱讀,并且還可以減少代碼。 這里,我們介紹擴(kuò)展函數(shù)(Extension Function)的概念及其使用方式,我們旨在將 Kotlin 中的擴(kuò)展函數(shù)視為遵循 Android 開發(fā)中一些最佳實(shí)踐的能力。

1 什么是擴(kuò)展函數(shù)(Extension Function)

從根本上說(shuō),擴(kuò)展函數(shù)是類的成員函數(shù),但是定義在類之外。

例如,如果我們需要對(duì) String 類使用一個(gè)方法,該方法返回一個(gè)刪除了第一個(gè)和最后一個(gè)字符的新字符串,我們可以為它編寫一個(gè)擴(kuò)展方法。

2 為什么使用擴(kuò)展函數(shù)(Extension Function)

一般來(lái)說(shuō),擴(kuò)展函數(shù)有可能通過改進(jìn)和刪除項(xiàng)目中的樣板代碼來(lái)使我們的代碼更簡(jiǎn)潔、可讀和合乎邏輯。 此外,更少的代碼意味著更少的出錯(cuò)機(jī)會(huì)。 除此之外

  • 它可以向最終類添加功能。
  • 它可以在不進(jìn)行子類化(sub-classing)的情況下添加功能,這意味著我們可以在基類中提及對(duì)象引用及其實(shí)現(xiàn)。
  • 它遵循面向?qū)ο缶幊讨械囊恍┳罴褜?shí)踐,特別是開放-封閉原則(在 SOLID 原則中),它指示實(shí)體(類、模塊、函數(shù)等)應(yīng)該對(duì)擴(kuò)展開放,但對(duì)修改關(guān)閉。

3 如何使用擴(kuò)展函數(shù)(Extension Function)

基本上,Kotlin 擴(kuò)展函數(shù)提供了一種向類添加方法的工具,而無(wú)需繼承類或使用任何類型的設(shè)計(jì)模式。 創(chuàng)建的擴(kuò)展函數(shù)用作該類中的常規(guī)函數(shù)。 擴(kuò)展函數(shù)使用前綴接收器類型(類名)和方法名(擴(kuò)展函數(shù))聲明,如下所示:

fun <class_name>.<method_name>()

通常,我們從類外部調(diào)用已在類內(nèi)部定義的所有方法。 例如,假設(shè)我們要調(diào)用 Circle 類的方法 perimeter() ,該方法未在類中定義。 那么這個(gè)時(shí)候,Circle.perimeter() 函數(shù)稱為擴(kuò)展函數(shù)(Extension Function),Circle 類也稱為接收器類型(receiver type)。

class Circle(val radius: Double){ 
    fun area(): Double{ 
        return Math.PI * radius * radius; 
    } 
} 
fun Circle.perimeter(): Double{ 
        return 2 * Math.PI * radius; 
    }
fun main(){
      val circle = Circle(5.5); 
      val perimeterValue = circle.perimeter()
      println("Perimeter: $perimeterValue")
      val areaValue = circle.area()
      println("Area: $areaValue")
}

4 擴(kuò)展庫(kù)類

在 Kotlin 中,您可以擴(kuò)展庫(kù)類以及用戶定義的類。 事實(shí)上,擴(kuò)展函數(shù)可以添加到庫(kù)類中,并以與用戶定義類相同的方式使用。 例如:

fun main(args: Array<String>){ 
    fun Int.abs() : Int{
        return if(this < 0) 
    } 
    println((-4).abs()) 
    println(4.abs()) 
}

5 空值接收器(Nullable Receiver)

擴(kuò)展函數(shù)(Extension Function)可以用可以為空的類(nullable class)類型來(lái)定義。 在這種情況下,在擴(kuò)展函數(shù)內(nèi)部添加了對(duì) null 的檢查,并返回適當(dāng)?shù)闹怠?例如,我們使用 swap() 方法交換 Mutable List 的元素,但 MutableList 類內(nèi)部不支持 swap()。 因此,為了解決這個(gè)問題,我們應(yīng)該通過 swap() 函數(shù)為 MutableList 編寫一個(gè)擴(kuò)展函數(shù)。

funMutableList<Int>?.swap(first: Int, second: Int): Any{ 
   if (this == null) return "null" //Checked the null-ability here!
   else{  
     val temp = this[first] 
     this[first] = this[second]  
     this[second] = temp  
       return this
    }  
}  
fun main(){  
     val list = mutableListOf(6,9,7)  
     println("Print the list :$list")  
val result = list.swap(0, 2)  
     println("swapping the list :$result")  //Output: [7, 10, 6]
}

6 伴隨對(duì)象擴(kuò)展(Companion Object Extensions)

事實(shí)上,伴生對(duì)象(companion object)是在類中提及并使用伴生關(guān)鍵字指定的對(duì)象。 伴生對(duì)象用于直接調(diào)用類的成員函數(shù),使用類名,類似于 Java 中的 static 關(guān)鍵字。如果一個(gè)類包含伴生對(duì)象,我們可以為伴生對(duì)象定義擴(kuò)展函數(shù)和屬性。

class SampleClass {
    companion object { }  
}
fun SampleClass.Companion.printTest() { println("Test") }
fun main() {
    SampleClass.printTest()
}

此外,可以使用類名(限定符)調(diào)用伴隨對(duì)象擴(kuò)展。 例如:

class SampleClass{  
    companion object{  
      fun create(sample :String): String{ 
            return sample
        }  
    }  
} 
fun SampleClass.Companion.printString(){
      println("Companion Object Extensions") 
}
fun main(args: Array<String>){  
     val sampleObject = SampleClass.printString("Print the string") 
     println(sampleObject)           
}

所以說(shuō),Kotlin 支持使用新功能擴(kuò)展類的能力,而無(wú)需實(shí)現(xiàn)繼承或使用設(shè)計(jì)模式設(shè)計(jì)模式。 這是通過稱為擴(kuò)展功能的特殊指示來(lái)完成的。 這種能力可能有助于使代碼變得更清晰和易于閱讀,并且還可以減少代碼。 然而,這種方法有一些負(fù)面后果。 例如,我們不能訪問基類的受保護(hù)屬性或函數(shù)。

到此這篇關(guān)于Kotlin Extension Function擴(kuò)展函數(shù)詳細(xì)介紹的文章就介紹到這了,更多相關(guān)Kotlin Extension Function 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

乌苏市| 达孜县| 伊宁县| 营口市| 四子王旗| 娄底市| 嘉兴市| 石狮市| 台东市| 石阡县| 仙游县| 新兴县| 辽宁省| 武乡县| 武强县| 金平| 巨野县| 平舆县| 毕节市| 孟州市| 贡觉县| 仲巴县| 共和县| 北流市| 嘉鱼县| 太仓市| 苏尼特右旗| 察哈| 八宿县| 新蔡县| 双江| 高州市| 明溪县| 巧家县| 新兴县| 常州市| 丹凤县| 原阳县| 海南省| 邢台县| 石家庄市|