首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin委托

委托属性 语法:val/var : by 属性的委托不必实现任何的接口,但是需要提供一个 getValue() 函数(和 setValue()——对于 var 属性),因为属性对应的...get()(和 set())会被委托给它的 getValue() 和 setValue() 方法。...属性委托要求 对于一个只读属性(即 val 声明的),委托必须提供一个名为 getValue 的函数,该函数接受以下参数(可以继承 ReadOnlyProperty 实现该方法): thisRef ——...必须与 属性所有者 类型(对于扩展属性——指被扩展的类型)相同或者是它的超类型, property —— 必须是类型 KProperty 或其超类型, 对于一个可变属性(即 var 声明的),委托必须额外提供一个名为...setValue 的函数,该函数接受以下参数(可以继承 ReadWriteProperty 实现该方法): thisRef —— 同 getValue(), property —— 同 getValue

1.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

【Android进阶】kotlin 委托

Kotlin 通过关键字 by 实现委托。 类委托 类的委托即一个类中定义的方法实际是调用另一个类的对象的方法来实现的。..., 属性的 get() 方法(以及set() 方法)将被委托给这个对象的 getValue() 和 setValue() 方法。...定义一个被委托的类 该类需要包含 getValue() 方法和 setValue() 方法,且参数 thisRef 为进行委托的类的对象,prop 为进行委托的属性的对象。...该函数接受以下参数: thisRef —— 必须与属性所有者类型(对于扩展属性——指被扩展的类型)相同或者是它的超类型 property —— 必须是类型 KProperty 或其超类型 这个函数必须返回与属性相同的类型...相同: thisRef —— 必须与 属性所有者 类型(对于扩展属性——指被扩展的类型)相同或者是它的超类型 property —— 必须是类型 KProperty 或其超类型

51920

Kotlin开发笔记之委托属性与区间(译)

例如: class Example { var p: String by Delegate() } 委托对象必须实现一个拥有 getValue() 方法的操作符,以及 setValue() 方法来实现读...getValue() 和 setValue() 也可以被声明成 扩展方法 来实现。...Kotlin 已经提供了内置的扩展方法来允许将 Map and MutableMap 实例用作委托,属性名作为其中的键。...在这种情况下,委托可以直到该变量在方法内部声明的时候才去初始化,而不必在构造函数中就执行初始化。 泛型委托 委托方法也可以被声明成泛型的,这样一来不同类型的属性就可以复用同一个委托类了。...说明:对于非空基本类型委托属性来说,最好使用给定类型的特定委托类而不是泛型委托来避免每次访问属性时增加装箱的额外开销。

66310

Kotlin的委托属性和区间

例如: class Example { var p: String by Delegate() } 委托对象必须实现一个拥有 getValue() 方法的操作符,以及 setValue() 方法来实现读...getValue() 和 setValue() 也可以被声明成 扩展方法 来实现。...Kotlin 已经提供了内置的扩展方法来允许将 Map and MutableMap 实例用作委托,属性名作为其中的键。...在这种情况下,委托可以直到该变量在方法内部声明的时候才去初始化,而不必在构造函数中就执行初始化。 泛型委托 委托方法也可以被声明成泛型的,这样一来不同类型的属性就可以复用同一个委托类了。...说明:对于非空基本类型委托属性来说,最好使用给定类型的特定委托类而不是泛型委托来避免每次访问属性时增加装箱的额外开销。

1.3K70

Kotlin 的 Property Delegate 与 Swift 的 Property Wrapper

... } 原来 getValue 和 setValue 还是运算符方法,其实这里我们甚至可以把它们定义成扩展方法,只要方法类型符合要求就可以。...,因此我们实现了既可将属性置为 null 又可将属性 image 声明为不可空的 Bitmap 类型的需求。...下面我们给出 State 的声明,具体实现没有开源,但可以想到的是在 wrappedValue 的 setter 调用时一定会触发 DynamicProperty 协议的 update 方法的调用,projectedValue...by delegate 但这个写法又显得 delegate 与 state 的联系没有那么紧密,因此 Swift 的属性包装器在 projectedValue 的设计上为开发者提供了更大的发挥空间。...Kotlin 的属性代理的语法结构没有类型上的强制约束,只要实现 getValue 和 setValue 这两个方法即可用作属性代理的对象;不过,获取一个属性的代理对象的方式不是特别友好,一方面需要使用到反射

5.2K20

Kotlin修炼指南(五)—Delegates

这一点看上去好像并没有比Java方便多少,但是在Kotlin中,在某些简单的场景下,实际上是可以省略掉实现类的,直接通过对委托实现的重写来实现委托接口,代码如下所示。...val/var : by 在前面的讲解中,类委托委托的是接口中指定的方法,而属性委托,则委托的是属性的get、set方法,属性委托实际上就是将get、set方法的逻辑委托给一个单独的类来进行实现...(对于val属性来说,委托的是getValue方法,对于var属性来说,委托的是setValue和getValue方法)。...首先,我们定义一个var属性,并将其委托给MyDelegate类,即将get和set方法进行了交接托管,因此,MyDelegate类需要重写getValue和setValue方法,为其提供新的返回值和逻辑...let { putSPValue(propName, value) } } override fun getValue(thisRef: Any, property: KProperty

79320

【Android进阶】Kotlin笔记

委托 Java中有一套设计模式就是委托模式,就是指编写一个类,但它不提供实现,所有的功能都会委托给另一个类实现,在必要的时候对类进行增强。...ASDFASDF */ 被委托的类应该实现一个getValue和setValue方法委托方的变量不再存储值,而是由被委托的类提供存储功能。...= null operator fun getValue(thisRef: Any?...,Lazy方法会返回我们的委托人LazyDelegate,因为Kotlin官方就为一些自带的委托封装了方法,可能是Kotlin社区惯用的编码规范,确实,这样好看一些,而且Jetpack Compose中的...泛型用于支持全部类型的值。 伴生对象 Java中经常会使用静态工厂方法来构造对象,这是因为静态工厂方法比构造器更加适用于处理那些很多属性可以不在构造时提供的类。静态工厂方法更加具有可读性。

70420

Kotlin学习教程之操作符重载详解

plus 方法的参数类型是任意的,因此可以方法重载,但是 参数数量只能是 1 ,因为 + 是一个二元操作符。plus 方法的返回值类型也是任意的。..., 没有新的对象被创建, 调用的是 add 方法....只要一个类提供了满足操作符方法签名的方法,哪怕它只是一个普通方法,不需要加 operator 修饰符(Java 中也没有这个修饰符),就可以在 Kotlin 中以操作符的方式调用。...非 inv() 操作符重载与属性委托、中缀调用 我们在使用委托属性时也用过 operator 修饰符: class Delegate { operator fun getValue(thisRef..., property: KProperty<* , value: String) { //... } } 符合这样方法签名的 getValue 、 setValue 也是操作符函数,用于委托属性的

92730

Kotlin Vocabulary | Kotlin 委托代理

有时候,完成一些工作的方法是将它们委托给别人。这里不是在建议您将自己的工作委托给朋友去做,而是在说将一个对象的工作委托给另一个对象。 当然,委托在软件行业不是什么新鲜名词。...由于新的类继承了具体的 ArrayList 类而不是实现 MutableList 接口,因此它与 ArrayList 的实现高度耦合。...装饰者会持有一个目标类的内部引用,并且包装 (或者装饰) 接口提供的所有公共方法。 在您无法继承特定类型时,委托模式就显得十分有用。通过使用类代理,您的类可以不继承于任何类。...让我们假设您有一个 Person 类型,定义如下: class Person(var name: String, var lastname: String) 该类型的 name 属性有一些格式化需求。..., String> { private var formattedString: String = "" override fun getValue( thisRef: Any

2K20

Kotlin Vocabulary | Kotlin 委托代理

有时候,完成一些工作的方法是将它们委托给别人。这里不是在建议您将自己的工作委托给朋友去做,而是在说将一个对象的工作委托给另一个对象。 当然,委托在软件行业不是什么新鲜名词。...由于新的类继承了具体的 ArrayList 类而不是实现 MutableList 接口,因此它与 ArrayList 的实现高度耦合。...装饰者会持有一个目标类的内部引用,并且包装 (或者装饰) 接口提供的所有公共方法。 在您无法继承特定类型时,委托模式就显得十分有用。通过使用类代理,您的类可以不继承于任何类。...让我们假设您有一个 Person 类型,定义如下: class Person(var name: String, var lastname: String) 该类型的 name 属性有一些格式化需求。..., String> { private var formattedString: String = "" override fun getValue( thisRef: Any

17130

Kotlin入门(25)共享参数模板

找毛病其实都是容易的,如果仍然使用Java编码,完善的就完善,不能完善的也不必苛求了。 之所以挑Java实现方式的毛病,倒不是因为看它不顺眼整天吹毛求疵,而是因为Kotlin有更好的解决办法。...apply方法都表示提交修改     } } 外部在使用该工具类之时,可在Activity代码中声明来自于Preference的委托属性,委托属性一旦声明,则它的初始值便是从共享参数读取的数值;后续代码若给委托属性赋值...因此星号相当于Java里面的问号?...>完成数据的读取和保存,也就是说,Preference接管了这些属性的读写行为,接管后的操作则是模板类的getValue和setValue方法。...2、lateinit延迟初始化:变量声明时没有马上赋值,但该变量仍是个非空变量,何时初始化由开发者编码决定。

87010
领券