摘自官網解釋:
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模式。擴充套件是一種靜態行為,對被擴充套件的類 本身不會造成任何影響。擴充套件函式可以在已有類中新增新的方法,不會對原類做修改,擴充套件函式定義形式 ...