Kotlin學習筆記(五) 擴展函數 擴展屬性

擴展函數和屬性能夠定義在對應的類中和kotlin文件中;java

1.擴展函數

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 成員函數

2.擴展屬性

擴展屬性屬於靜態行爲,所以屬性聲明使用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

相關文章
相關標籤/搜索