来看一个常见的校验字符串的函数
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");
}
}
编译后做了以下几件事情
- 把扩展函数编译成一个静态函数,在扩展函数中加入当前对象,然后对当前对象做定制化处理。
- 扩展函数调用的时候,不会把当前对象传递个扩展函数。
扩展函数并没有修改一个类,只是把一个类和一个方法绑定在一起了。调用扩展函数的时候实际上时时调用的对应的扩展方法。
扩展函数极大简化了代买的编写,底层都有做一些优化。