快速上手 Kotlin 开发系列之动态代理

本节介绍 Kotlin 中没有反射的动态代理。

Java 中的动态代理

在讲 Kotlin 的动态代理之前先简单回顾下 Java 的动态代理,通过一个简单的例子说明下:

首先,给出一个接口和其实现类:

为了可以动态代理某个对象,我们实现 InvocationHandler 接口:

通过 Proxy.newProxyInstance 方法创建代理对象,实现代理:

Kotlin 中的动态代理

Kotlin 在语言层面已经原生支持了动态代理,只需要一个 by 关键字就可以实现,通过示例了解下。

首先,将上面的被代理的类使用 Kotlin 来实现:

接着通过 by 关键字实现一个代理类:

最后在 main 方法中创建代理类,并调用:

需要注意的是,如果代理类中实现了被代理接口的方法,代理对象调用时实际执行的就是代理对象的所实现的方法。

实际上,Kotlin 会将动态代理在编译以后转换为静态代理去调用,而 Java 的动态代理本质上是通过反射去调用的,所以 Kotlin 的动态代理一定要比 Java 的动态代理效率高。

以上就是本节内容,欢迎大家关注~

你可能感兴趣的:(快速上手 Kotlin 开发系列之动态代理)