kotlin的synthetic实现方式是编译期修改synthetic相关代码,
private HashMap _$_findViewCache;
public View _$_findCachedViewById(int var1) {
if (this._$_findViewCache == null) {
this._$_findViewCache = new HashMap();
}
View var2 = (View)this._$_findViewCache.get(var1);
if (var2 == null) {
var2 = this.findViewById(var1);
this._$_findViewCache.put(var1, var2);
}
return var2;
}
public void _$_clearFindViewByIdCache() {
if (this._$_findViewCache != null) {
this._$_findViewCache.clear();
}
}
实际上使用的还是findViewById来寻找布局,只不过相关代码,kotlin帮我们自动生成了,
相比于butterknife的自动生成一个相关类xxx_ViewBinding而言这种直接在当前文件引入一个kotlinx.android.synthetic.main来实现的方法显得更酷一点。
那么为什么kotlinx能做到这么酷呢,得益于kotlin-jvm,以往我们只能利用Apt在编译前通过注解去自动帮我们生成一些java代码,而kotlin则可以直接将kt文件编译成class文件,并在这个过程中实现java类源码的更改,这个过程更酷。
�