美文网首页
kotlin扩展(函数)的理解

kotlin扩展(函数)的理解

作者: ironman_ | 来源:发表于2019-04-15 19:14 被阅读0次

kotlin的扩展看起来很神奇,可以随意给类添加方法。

先编译成byteCode,然后反编译成java,看看如果是java是如何实现。
Task.kt

class User(var name:String)

/**扩展函数**/
fun User.Print(){
    print("用户名 $name")
}

fun main(arg:Array<String>){
    var user = User("Runoob")
    user.Print()
}

通过Android studio的工具Tools -> "Kotlin" -> "show kotlin byteCode"

然后就可以看到对应的byteCode,然后点击”Decompile“就能反编译成java代码,可以辅助理解他的原理

public final class TaskKt {
   public static final void Print(@NotNull User $receiver) {
      Intrinsics.checkParameterIsNotNull($receiver, "receiver$0");
      String var1 = "用户名 " + $receiver.getName();
      System.out.print(var1);
   }

   public static final void main(@NotNull String[] arg) {
      Intrinsics.checkParameterIsNotNull(arg, "arg");
      User user = new User("Runoob");
      Print(user);
   }
}


// User.java
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import org.jetbrains.annotations.NotNull;

public final class User {
   @NotNull
   private String name;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public final void setName(@NotNull String var1) {
      Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
      this.name = var1;
   }

   public User(@NotNull String name) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.name = name;
   }
}

可以看到他是用了类似静态方法的原理去添加这个扩展。

参考文章:

相关文章

网友评论

      本文标题:kotlin扩展(函数)的理解

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