Kotlin的属性代理

简介: 一、定义一个方法 val/var : by (代理者)表达式 代理者需要实现相应的setValue/getValue 方法 如果是val,只需要设置getValue方法 如果是var,则需要设置setValue/getValue 方法二、看一个属性代理的例子吧package net.

一、定义一个方法
val/var <变量name>: <类型 Type> by (代理者)表达式
代理者需要实现相应的setValue/getValue 方法
如果是val,只需要设置getValue方法
如果是var,则需要设置setValue/getValue 方法

二、看一个属性代理的例子吧

package net.println.kotlin.chapter4.delegates

import kotlin.reflect.KProperty

/**
 * @author:wangdong
 * @description:
 */

class Delegates{

    //只有第一次访问到的时候,才会去初始化它
    // 通过by的方式来声明变量的时候,例如Hello的getValue就会交给lazy这个代理来完成
    val hello by lazy {
        "HelloBoy"
    }

    val hello2 by X()

    var hello3 by X()
}

/**写一个代理类*/
class X{
    private var value: String? = null

    //可读的方法
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        println("getValue: $thisRef -> ${property.name}")
        return value?: ""
    }

    //可写的方法
    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String){
        println("setValue, $thisRef -> ${property.name} = $value")
        this.value = value
    }
}

fun main(args: Array<String>) {
    val delegates = Delegates()
    println(delegates.hello)
    println(delegates.hello2)
    println(delegates.hello3)
    delegates.hello3 = "hello wdddd"
    println(delegates.hello3)
}

哈,结束啦

目录
相关文章
|
7月前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
|
8月前
|
NoSQL Redis Kotlin
Kotlin - 属性代理
Kotlin - 属性代理
70 5
|
8月前
|
NoSQL Redis Kotlin
Kotlin - 属性代理
Kotlin - 属性代理
58 1
|
8月前
|
NoSQL Redis Kotlin
Kotlin - 属性代理
Kotlin - 属性代理
|
8月前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
60 1
|
8月前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
|
9月前
|
NoSQL Redis Kotlin
Kotlin教程笔记(17) - 属性代理
Kotlin教程笔记(17) - 属性代理
49 1
|
1月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
69 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
9月前
|
JSON 调度 数据库
Android面试之5个Kotlin深度面试题:协程、密封类和高阶函数
本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点。文章详细解析了Kotlin中的协程、扩展函数、高阶函数、密封类及`inline`和`reified`关键字在Android开发中的应用,帮助读者更好地理解和使用这些特性。
181 1
|
10月前
|
Android开发 开发者 Kotlin
告别AsyncTask:一招教你用Kotlin协程重构Android应用,流畅度飙升的秘密武器
【9月更文挑战第13天】随着Android应用复杂度的增加,有效管理异步任务成为关键。Kotlin协程提供了一种优雅的并发操作处理方式,使异步编程更简单直观。本文通过具体示例介绍如何使用Kotlin协程优化Android应用性能,包括网络数据加载和UI更新。首先需在`build.gradle`中添加coroutines依赖。接着,通过定义挂起函数执行网络请求,并在`ViewModel`中使用`viewModelScope`启动协程,结合`Dispatchers.Main`更新UI,避免内存泄漏。使用协程不仅简化代码,还提升了程序健壮性。
350 1