美文网首页
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