kotlin扩展函数

2021-07-08  本文已影响0人  MIRROR1217

kotlin扩展函数非常方便好用,可以完美的代替各种Utils:StringUtils、FileUtils、DateUtils等。我们分析其内部原理。

比如我们下个简单的例子:

fun String.print() {
    print(this)
}

我们这里设置一个String的扩展函数,打印它的内容,我们看下反编译之后的代码:

@Metadata(
   mv = {1, 1, 16},
   bv = {1, 0, 3},
   k = 2,
   d1 = {"\u0000\f\n\u0000\n\u0002\u0010\u0002\n\u0002\u0010\u000e\n\u0000\u001a\n\u0010\u0000\u001a\u00020\u0001*\u00020\u0002¨\u0006\u0003"},
   d2 = {"print", "", "", "space1"}
)
public final class Test2Kt {
   public static final void print(@NotNull String $this$print) {
      Intrinsics.checkParameterIsNotNull($this$print, "$this$print");
      boolean var1 = false;
      System.out.print($this$print);
   }
}
// Test2.java
import kotlin.Metadata;

@Metadata(
   mv = {1, 1, 16},
   bv = {1, 0, 3},
   k = 1,
   d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002¨\u0006\u0003"},
   d2 = {"LTest2;", "", "()V", "space1"}
)
public final class Test2 {
}

看其源码可知,它生成了一个静态方法,然后再进行逻辑处理。

上一篇下一篇

猜你喜欢

热点阅读