Kotlin擴充套件函式

會寫程式碼的吉他手發表於2020-11-22
  • 擴充套件函式:在不修改某個類的原始碼的情況下,仍然可以開啟這個類,向該類中新增新的函式。

比如說,我們在Android開發中經常用到Toast,每次建立一個Toast的時候,又要傳入上下文,還要傳入內容,還要時間長短,最後還得寫個show,有時候show忘記寫了還一臉懵逼的不知道為啥不彈出來,於是可以封裝一個ToastUtil來管理toast:

public class ToastUtil {
    public static void showToast(String msg) {
        Toast.makeText(MyApplication.getContext(), msg, Toast.LENGTH_SHORT).show();
    }
}

這種寫法絕對可以正常工作,並且這也是JAVA 程式設計中最標準的實現思維,但是有了擴充套件函式之後就不一樣了,我們可以使用一種更加物件導向的思維來實現這個功能,比如說將showToast()新增到String類當中。

擴充函式的標準定義語法為:

fun ClassName.methodName(param1: Int,param2: Int): Int {

}

可以看到,要定義擴充函式的話,只需要在方法名前加一個ClassName.的語法結構,就表示將該函式新增到指定類當中了。

由於我們要向String類中新增擴充套件函式,所以先新建一個類叫String,名字隨便無所謂,但是為了規範吧,要新增什麼類的擴充套件函式就命名成什麼類叭:

fun String.showToast() {
    Toast.makeText(MyApplication.context, this, Toast.LENGTH_SHORT).show()
}

**注意一定要是頂層方法!!!**千萬不要寫在String類面了,不然是無效的。
那現在我們再想彈一個Toast的話,可以這麼寫:

 "我是一個測試Toast".showToast()

當然不止String了,這只是個例子,你還可以為別的物件新增擴充套件函式。

說起來,我在寫Flutter的時候,Dart的擴充套件函式我就不怎麼喜歡,因為要手動導包,不像Kotlin這樣寫在頂層方法就可以直接呼叫了

相關文章