Kotlin学习笔记(五) 扩展函数 扩展属性

扩展函数和属性可以定义在对应的类中和kotlin文件中;

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.当类成员函数与扩展函数签名一样时,优先执行成员函数.

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,若存在成员属性和扩展属性一致,则优先调用成员属性;

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方法显式的定义;

猜你喜欢

转载自my.oschina.net/u/3220575/blog/1825397