擴展函數和屬性能夠定義在對應的類中和kotlin文件中;java
1.擴展函數能夠由對象直接調用,在擴展函數中,用this指代調用對象;函數
data class User( @get:NotNull var username:String, var password:String? = null, var createTime:Date? = null, var updateTime:Date? = null ) //擴展函數 fun User.sayHello(){ println("hello") } fun main(args: Array<String>) { val user = User("") user.sayHello() } 輸出爲 hello
2.當類成員函數與擴展函數簽名同樣時,優先執行成員函數.this
data class User( @get:NotNull var username:String, var password:String? = null, var createTime:Date? = null, var updateTime:Date? = null ){ //成員函數 fun sayHello(){ println("hello 成員函數") } } //擴展函數 fun User.sayHello(){ println("hello 擴展函數") } fun main(args: Array<String>) { val user = User("") user.sayHello() } 輸出: hello 成員函數
擴展屬性屬於靜態行爲,所以屬性聲明使用val,若存在成員屬性和擴展屬性一致,則優先調用成員屬性;spa
data class User( @get:NotNull var username:String = "成員username", var password:String? = null, var createTime:Date? = null, var updateTime:Date? = null ) //擴展屬性 val User.height:Double get() = 180.0 val User.username:String get() = "擴展username" fun main(args: Array<String>) { val user = User() println(user.height) println(user.username) } 輸出: 180.0 成員username
擴展屬性不能夠直接被初始化,必須有getter/setter方法顯式的定義;code