在 java 中,如果我想拦截一个类的方法调用,我可以使用Proxy.newProxyInstance()
并提供一个InvocationHandler
实现invoke()
.
我已经看到,在 kotlin 中,您可以使用委托属性来拦截属性访问。
kotlin 是否有任何特性可用于为方法提供类似的功能?
在 java 中,如果我想拦截一个类的方法调用,我可以使用Proxy.newProxyInstance()
并提供一个InvocationHandler
实现invoke()
.
我已经看到,在 kotlin 中,您可以使用委托属性来拦截属性访问。
kotlin 是否有任何特性可用于为方法提供类似的功能?
Kotlin 没有标准统一的创建方式Proxies
。在使用 K/JVM 平台时您仍然可以使用Proxy.newProxyInstance()
,但请记住 Kotlin 编译器将生成/重命名方法(您可以使用@JvmName
它来控制它)。在 JS 平台上有一个类似的特性(这里是 MDN 文档),你必须@JsName
处理方法重命名。
至于 Native,(据我所知)没有办法做到这一点,因为没有实现反射。
委托的目标不是提供代理的替代方案,但您可能会在某些用例中摆脱它们。
此处有此功能的功能请求,但并未引起太多关注