本節(jié)介紹 Kotlin 中沒有反射的動態(tài)代理。
Java 中的動態(tài)代理
在講 Kotlin 的動態(tài)代理之前先簡單回顧下 Java 的動態(tài)代理趣效,通過一個簡單的例子說明下:
首先漱凝,給出一個接口和其實現(xiàn)類:
為了可以動態(tài)代理某個對象看锉,我們實現(xiàn) InvocationHandler 接口:
通過 Proxy.newProxyInstance 方法創(chuàng)建代理對象誓沸,實現(xiàn)代理:
Kotlin 中的動態(tài)代理
Kotlin 在語言層面已經(jīng)原生支持了動態(tài)代理梅桩,只需要一個 by
關(guān)鍵字就可以實現(xiàn),通過示例了解下拜隧。
首先摘投,將上面的被代理的類使用 Kotlin 來實現(xiàn):
接著通過 by
關(guān)鍵字實現(xiàn)一個代理類:
最后在 main 方法中創(chuàng)建代理類,并調(diào)用:
需要注意的是虹蓄,如果代理類中實現(xiàn)了被代理接口的方法,代理對象調(diào)用時實際執(zhí)行的就是代理對象的所實現(xiàn)的方法幸撕。
實際上薇组,Kotlin 會將動態(tài)代理在編譯以后轉(zhuǎn)換為靜態(tài)代理去調(diào)用,而 Java 的動態(tài)代理本質(zhì)上是通過反射去調(diào)用的坐儿,所以 Kotlin 的動態(tài)代理一定要比 Java 的動態(tài)代理效率高律胀。
以上就是本節(jié)內(nèi)容宋光,歡迎大家關(guān)注~