Kotlin擴充套件函式

2021-10-19 21:10:59 字數 1209 閱讀 2696

摘自官網解釋:

kotlin 可以對乙個類的屬性和方法進行擴充套件,且不需要繼承或使用 decorator 模式

擴充套件是一種靜態行為,對被擴充套件的類**本身不會造成任何影響

fun receivertype.

functionname

(params)

fun float.

topx()

: float

注:建立這樣乙個kt檔案,按照以上這個方式寫出來的方法,是屬於receivertype這個類嗎?不是的,它不屬於任何乙個類,是乙個頂層函式top-level function,屬於所在的包。為什麼能夠被receivertype的物件呼叫呢?實際是限定了擴充套件函式只有通過receivertype型別才能呼叫。

class exp 

funstarttest()

}

注:這種成員的擴充套件函式,呼叫範圍只能在這個類的內部,外部不能呼叫

val float.dp

get()

= typedvalue.

(typedvalue.complex_unit_dip,

this

, resources.

getsystem()

.displaymetrics)

注:擴充套件屬性只能被宣告為 val,不允許被初始化,只能由顯式提供的 getter/setter 定義。

在kotlin中擴充套件是靜態分發的,不是根據接收者型別的虛方法。也就是說呼叫擴充套件函式是由呼叫所在的表示式型別來決定的,而不是由表示式執行時求值結果決定的。例如:

open

class c

class d:c(

)fun c.

name()

="cname"

// 擴充套件函式 foo

fun d.

name()

="dname"

// 擴充套件函式 foo

funprintfoo

(c: c)

funmain

(arg:array

)

kotlin 擴充套件

kotlin允許擴充套件類的屬性和方法,不需要繼承或使用 decorator 模式。擴充套件是一種靜態行為,對被擴充套件的類 本身不會造成任何影響。擴充套件函式定義形式 fun receivertype functionname params 其中,receivertype 為待擴充套件的類名,修飾...

Kotlin 擴充套件

kotlin 可以對乙個類的屬性和方法進行擴充套件,且不需要繼承或使用 decorator 模式。擴充套件是一種靜態行為,對被擴充套件的類 本身不會造成任何影響。擴充套件函式可以在已有類中新增新的方法,不會對原類做修改,擴充套件函式定義形式 fun receivertype functionname...

Kotlin 擴充套件

伴生物件的擴充套件 擴充套件的作用域 擴充套件宣告為成員 endkotlin可以對乙個類的屬性和方法進行擴充套件,且不需要繼承或使用decorator模式。擴充套件是一種靜態行為,對被擴充套件的類 本身不會造成任何影響。擴充套件函式可以在已有類中新增新的方法,不會對原類做修改,擴充套件函式定義形式 ...