1

在 java 中,如果我想拦截一个类的方法调用,我可以使用Proxy.newProxyInstance()并提供一个InvocationHandler实现invoke().

我已经看到,在 kotlin 中,您可以使用委托属性来拦截属性访问。

kotlin 是否有任何特性可用于为方法提供类似的功能?

4

1 回答 1

2

Kotlin 没有标准统一的创建方式Proxies。在使用 K/JVM 平台时您仍然可以使用Proxy.newProxyInstance(),但请记住 Kotlin 编译器将生成/重命名方法(您可以使用@JvmName它来控制它)。在 JS 平台上有一个类似的特性(这里是 MDN 文档),你必须@JsName处理方法重命名。

至于 Native,(据我所知)没有办法做到这一点,因为没有实现反射。

委托的目标不是提供代理的替代方案,但您可能会在某些用例中摆脱它们。

此处有此功能的功能请求,但并未引起太多关注

于 2020-02-06T13:01:41.097 回答