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

相关文章
相关标签/搜索