一分钟学习--扩展函数

166 阅读1分钟

来看一个常见的校验字符串的函数

fun String?.valid() : Boolean =
        this != null && !this.equals("null", true)
                && this.trim().isNotEmpty()

fun main(){
    var b = "hello".valid()
}

我们转成java代码之后在来看一下。

public final class MyktKt {
   public static final boolean valid(@Nullable String $receiver) {
      boolean var10000;
      if ($receiver != null && !StringsKt.equals($receiver, "null", true)) {
         CharSequence var1 = (CharSequence)StringsKt.trim((CharSequence)$receiver).toString();
         if (var1.length() > 0) {
            var10000 = true;
            return var10000;
         }
      }

      var10000 = false;
      return var10000;
   }

   public static final void main() {
      boolean b = valid("hello");
   }
}

编译后做了以下几件事情

  • 把扩展函数编译成一个静态函数,在扩展函数中加入当前对象,然后对当前对象做定制化处理。
  • 扩展函数调用的时候,不会把当前对象传递个扩展函数。

扩展函数并没有修改一个类,只是把一个类和一个方法绑定在一起了。调用扩展函数的时候实际上时时调用的对应的扩展方法。

扩展函数极大简化了代买的编写,底层都有做一些优化。