發(fā)表日期: 2022-09-24 11:44:00 瀏覽次數(shù):132
書生商友信息科技專注于提供一站式建站服務,企業(yè)建站、電腦站、手機站、微信站、域名郵箱、400電話、淘寶裝修、網(wǎng)站推廣,【網(wǎng)站定制】網(wǎng)站建設推廣,網(wǎng)絡SEO優(yōu)化。
服務熱線:400-111-6878 手機微信同號:18118153152(各城市商務人員可上門服務)。
慈溪網(wǎng)絡公司
receiverType:表示函數(shù)的接收者,也就是函數(shù)擴展的對象
functionName:擴展函數(shù)的名稱
params:擴展函數(shù)的參數(shù),可以為NULL
以下實例擴展 User 類 :
class User(var name:String)/**擴展函數(shù)**/fun User.Print(){ print("用戶名 $name")}fun main(arg:Array<String>){ var user = User("Runoob") user.Print()}
實例執(zhí)行輸出結(jié)果為:
用戶名 Runoob
下面代碼為 MutableList 添加一個swap 函數(shù):
// 擴展函數(shù) swap,調(diào)換不同位置的值fun MutableList<Int>.swap(index1: Int, index2: Int) { val tmp = this[index1] // this 對應該列表 this[index1] = this[index2] this[index2] = tmp}fun main(args: Array<String>) { val l = mutableListOf(1, 2, 3) // 位置 0 和 2 的值做了互換 l.swap(0, 2) // 'swap()' 函數(shù)內(nèi)的 'this' 將指向 'l' 的值 println(l.toString())}
實例執(zhí)行輸出結(jié)果為:
[3, 2, 1]
this關鍵字指代接收者對象(receiver object)(也就是調(diào)用擴展函數(shù)時, 在點號之前指定的對象實例)。
擴展函數(shù)是靜態(tài)解析的,并不是接收者類型的虛擬成員,在調(diào)用擴展函數(shù)時,具體被調(diào)用的的是哪一個函數(shù),由調(diào)用函數(shù)的的對象表達式來決定的,而不是動態(tài)的類型決定的:
open class Cclass D: C()fun C.foo() = "c" // 擴展函數(shù) foofun D.foo() = "d" // 擴展函數(shù) foofun printFoo(c: C) { println(c.foo()) // 類型是 C 類}fun main(arg:Array<String>){ printFoo(D())}
實例執(zhí)行輸出結(jié)果為:
c
若擴展函數(shù)和成員函數(shù)一致,則使用該函數(shù)時,會優(yōu)先使用成員函數(shù)。
class C { fun foo() { println("成員函數(shù)") }}fun C.foo() { println("擴展函數(shù)") }fun main(arg:Array<String>){ var c = C() c.foo()}
實例執(zhí)行輸出結(jié)果為:
成員函數(shù)
在擴展函數(shù)內(nèi), 可以通過 this 來判斷接收者是否為 NULL,這樣,即使接收者為 NULL,也可以調(diào)用擴展函數(shù)。例如:
fun Any?.toString(): String { if (this == null) return "null" // 空檢測之后,“this”會自動轉(zhuǎn)換為非空類型,所以下面的 toString() // 解析為 Any 類的成員函數(shù) return toString()}fun main(arg:Array<String>){ var t = null println(t.toString())}
實例執(zhí)行輸出結(jié)果為:
null
擴展屬性
除了函數(shù),Kotlin 也支持屬性對屬性進行擴展:
val <T> List<T>.lastIndex: Int get() = size - 1
擴展屬性允許定義在類或者kotlin文件中,不允許定義在函數(shù)中。初始化屬性因為屬性沒有后端字段(backing field),所以不允許被初始化,只能由顯式提供的 getter/setter 定義。
val Foo.bar = 1 // 錯誤:擴展屬性不能有初始化器
擴展屬性只能被聲明為 val。
如果一個類定義有一個伴生對象 ,你也可以為伴生對象定義擴展函數(shù)和屬性。
伴生對象通過"類名."形式調(diào)用伴生對象,伴生對象聲明的擴展函數(shù),通過用類名限定符來調(diào)用:
class MyClass { companion object { } // 將被稱為 "Companion"}fun MyClass.Companion.foo() { println("伴隨對象的擴展函數(shù)")}val MyClass.Companion.no: Int get() = 10fun main(args: Array<String>) { println("no:${MyClass.no}") MyClass.foo()}
實例執(zhí)行輸出結(jié)果為:
no:10伴隨對象的擴展函數(shù)
客戶對我們的評價:作為網(wǎng)絡負責人,與貴公司合作已經(jīng)有8年了。貴公司服務還是非常不錯的,有問題會及時解決。域名、網(wǎng)站、郵箱、推廣服務都是他們負責的,也比較省心。網(wǎng)站建設
各行業(yè)案例推薦!客戶由老客戶介紹或自主聯(lián)系我們!
服務熱線:400-111-6878 手機微信同號:18118153152(各城市商務人員可上門服務)。
備案號: 蘇ICP備11067224號-5
CopyRight ? 2021 通陸科技 All Right Reserved 未經(jīng)許可不得復制轉(zhuǎn)載
友情鏈接:蘇州貸款 武漢殯葬服務
24小時服務熱線:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
網(wǎng)址: http://f5283.cn 網(wǎng)站建設:上往建站
關鍵詞: 網(wǎng)站建設| 域名郵箱| 服務器空間| 網(wǎng)站推廣| 上往建站| 網(wǎng)站制作| 網(wǎng)站設計| 域名注冊| 網(wǎng)絡營銷| 網(wǎng)站維護|
企業(yè)郵箱| 虛擬主機| 網(wǎng)絡建站| 網(wǎng)站服務| 網(wǎng)頁設計| 網(wǎng)店美工設計| 網(wǎng)站定制| 企業(yè)建站| 網(wǎng)站設計制作| 網(wǎng)頁制作公司|
歡迎您免費咨詢,請?zhí)顚懸韵滦畔?,我們收到后會盡快與您聯(lián)系
全國服務熱線:400-111-6878