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 {
}
看其源码可知,它生成了一个静态方法,然后再进行逻辑处理。
网友评论