美文网首页
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-委托,是否被低估了?

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