欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin Extension Function擴展函數詳細介紹

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

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

1 什么是擴展函數(Extension Function)

從根本上說,擴展函數是類的成員函數,但是定義在類之外。

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

2 為什么使用擴展函數(Extension Function)

一般來說,擴展函數有可能通過改進和刪除項目中的樣板代碼來使我們的代碼更簡潔、可讀和合乎邏輯。 此外,更少的代碼意味著更少的出錯機會。 除此之外

  • 它可以向最終類添加功能。
  • 它可以在不進行子類化(sub-classing)的情況下添加功能,這意味著我們可以在基類中提及對象引用及其實現。
  • 它遵循面向對象編程中的一些最佳實踐,特別是開放-封閉原則(在 SOLID 原則中),它指示實體(類、模塊、函數等)應該對擴展開放,但對修改關閉。

3 如何使用擴展函數(Extension Function)

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

fun <class_name>.<method_name>()

通常,我們從類外部調用已在類內部定義的所有方法。 例如,假設我們要調用 Circle 類的方法 perimeter() ,該方法未在類中定義。 那么這個時候,Circle.perimeter() 函數稱為擴展函數(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 擴展庫類

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

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

5 空值接收器(Nullable Receiver)

擴展函數(Extension Function)可以用可以為空的類(nullable class)類型來定義。 在這種情況下,在擴展函數內部添加了對 null 的檢查,并返回適當的值。 例如,我們使用 swap() 方法交換 Mutable List 的元素,但 MutableList 類內部不支持 swap()。 因此,為了解決這個問題,我們應該通過 swap() 函數為 MutableList 編寫一個擴展函數。

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 伴隨對象擴展(Companion Object Extensions)

事實上,伴生對象(companion object)是在類中提及并使用伴生關鍵字指定的對象。 伴生對象用于直接調用類的成員函數,使用類名,類似于 Java 中的 static 關鍵字。如果一個類包含伴生對象,我們可以為伴生對象定義擴展函數和屬性。

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

此外,可以使用類名(限定符)調用伴隨對象擴展。 例如:

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)           
}

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

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

相關文章

  • Android判斷字符串中是否含字母、中文或數字

    Android判斷字符串中是否含字母、中文或數字

    這篇文章主要介紹了Android判斷字符串中是否含字母、中文或數字的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 深入AndroidManifest.xml文件解析詳解

    深入AndroidManifest.xml文件解析詳解

    AndroidManifest.xml是每個android程序中必須的文件。它位于整個項目的根目錄,描述了package中暴露的組件(activities,services,等等),他們各自的實現類,各種能被處理的數據和啟動位置
    2013-05-05
  • Android開發(fā)中Bitmap高效加載使用詳解

    Android開發(fā)中Bitmap高效加載使用詳解

    在Android開發(fā)中,我們經常與Bitmap打交道,而對Bitmap的不恰當的操作經常會導致OOM(Out of Memory)。這篇文章我們會介紹如何高效地在Android開發(fā)中使用Bitmap,在保證圖片顯示質量的前提下盡可能占用更小的內存。
    2017-12-12
  • android基本控件ToggleButton&Switch使用指南

    android基本控件ToggleButton&Switch使用指南

    本文給大家匯總介紹了android的2個基本控件ToggleButton和Switch的使用方法,非常的詳細,有需要的小伙伴可以參考下。
    2016-01-01
  • Android App獲取屏幕旋轉角度的方法

    Android App獲取屏幕旋轉角度的方法

    這篇文章主要為大家詳細介紹了Android App獲取屏幕旋轉角度,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Android RadarView雷達圖(蜘蛛網圖)的實現代碼

    Android RadarView雷達圖(蜘蛛網圖)的實現代碼

    這篇文章主要介紹了Android RadarView雷達圖(蜘蛛網圖)的實現代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Android按時間先后順序獲取目錄下文件列表

    Android按時間先后順序獲取目錄下文件列表

    這篇文章主要為大家詳細介紹了Android按時間先后順序獲取目錄下文件列表,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Android編程實現圖標拖動效果的方法

    Android編程實現圖標拖動效果的方法

    這篇文章主要介紹了Android編程實現圖標拖動效果的方法,涉及Android事件響應及圖標變換的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android百度地圖應用之MapFragment的使用

    Android百度地圖應用之MapFragment的使用

    這篇文章主要為大家詳細介紹了Android百度地圖應用之MapFragment的使用的相關資料,需要的朋友可以參考下
    2016-06-06
  • Android PicSelector圖片選擇器小功能

    Android PicSelector圖片選擇器小功能

    這篇文章主要為大家詳細介紹了Android PicSelector圖片選擇器小功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評論