美文网首页
Kotlin-委托,是否被低估了?

Kotlin-委托,是否被低估了?

作者: 大虾啊啊啊 | 来源:发表于2022-09-27 13:56 被阅读0次

1、属性委托

kotlin中的委托主要分为类的委托和属性的委托,我们先重点来看属性委托,用的比较多。

标准委托

kotlin提供了好几种标准委托,我们主要学习两个属性直接的直接委托、by lazy懒加载委托

将属性A委托给属性B
class MyDog {
    var newName: String? = null
    //将属性name 委托给newName
    var name by ::newName
}
fun main() {
    val dog = MyDog()
    dog.newName = "xiaohong"
    println("name:${dog.name} new Name:${dog.newName}")
    dog.name = "xiaoming"
    println("name:${dog.name} new Name:${dog.newName}")

}

我们知道当我们把成员修饰成非私有的 val的时候,默认持有getter方法、var的话就持有setter getter方法。
以上我们发现不管是修改newName的值,还是修改name的值,最终他们两个的值都会变成一样。有点类型双向绑定,但是其并不是双向绑定的。

以上我们把name属性委托给newName之后,就会把name的setter和getter委托给newName,也就是当访问name的setter和getter的时候,其实访问的是newName的setter 和getter。

我们转成Java代码看看


public final class MyDog {
   @Nullable
   private String newName;
   @Nullable
   private final KMutableProperty0 name$delegate = new MyDog$name$2((MyDog)this);

   @Nullable
   public final String getNewName() {
      return this.newName;
   }
   public final void setNewName(@Nullable String var1) {
      this.newName = var1;
   }
   @Nullable
   public final String getName() {
      KProperty0 var1 = (KProperty0)this.name$delegate;
      Object var3 = null;
      boolean var4 = false;
      return (String)var1.get();
   }
   public final void setName(@Nullable String var1) {
      KMutableProperty0 var2 = this.name$delegate;
      Object var4 = null;
      boolean var5 = false;
      var2.set(var1);
   }
}

final class MyDog$name$2 extends MutablePropertyReference0Impl {
   @Nullable
   public Object get() {
      return ((MyDog)this.receiver).getNewName();
   }

   public void set(@Nullable Object value) {
      ((MyDog)this.receiver).setNewName((String)value);
   }
}


相关文章

  • Kotlin-委托,是否被低估了?

    1、属性委托 kotlin中的委托主要分为类的委托和属性的委托,我们先重点来看属性委托,用的比较多。 标准委托 k...

  • Kotlin-可观测属性委托(Observable)-Deleg

    Kotlin-可观测属性委托(Observable)-Delegates.observable Delegates...

  • Kotlin-类委托(delegation)

    Kotlin-类委托(delegation) 我们用Java可以实现委托的功能,但是在Kotlin这个语言直接就已...

  • Kotlin-属性委托深入详解

    Kotlin-属性委托深入详解 学习一下属性的委托(delegated property),我们知道定义一个类的属...

  • kotlin-委托

    [toc] 委托是什么 委托又可以称为代理。为其他对象提供一种代理以控制对这个对象的访问,简单的说就是在访问和被访...

  • Kotlin-委托

    前言 项目地址https://github.com/laibinzhi/KotlinDelegation[http...

  • Kotlin-委托剖析(2)- 属性委托

    简单例子 以下是属性委托的代码, 属性b委托给了属性a,a、b两者数据同步。Tips:可空属性好像不能成为委托对象...

  • Kotlin-委托剖析(1)- 接口委托

    简单列子 定义Listener接口,A、B都实现Listener接口。如果A、B onSuccess\onFail...

  • 一些对Kotlin委托的理解

    前言 委托(Delegation),可能是 Kotlin 里最容易被低估的特性。 提到 Kotlin,大家最先想起...

  • Kotlin-强大的委托

    委托也叫代理,是一种可以以代理方式控制目标对象的访问,设计模式中成为-代理模式。 Java中,我们实现一个代理模式...

网友评论

      本文标题:Kotlin-委托,是否被低估了?

      本文链接:https://www.haomeiwen.com/subject/tzvtartx.html