【问题标题】:Which feature of kotlin can be used as a replacedment of method interception via java proxieskotlin 的哪个特性可以作为通过 java 代理拦截方法的替代品
【发布时间】:2020-02-06 12:23:58
【问题描述】:

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

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

kotlin 有没有什么特性可以用来为方法提供类似的功能?

【问题讨论】:

  • 您在寻找哪些功能?我的意思是,你总是可以围绕当前的代理实现构建一些看起来更像 kotlin 的东西

标签: java kotlin interceptor dynamic-proxy delegated-properties


【解决方案1】:

Kotlin 没有标准统一的方式来创建Proxies。在使用 K/JVM 平台时,您仍然可以使用 Proxy.newProxyInstance(),但请记住 Kotlin 编译器将生成/重命名方法(您可以使用 @JvmName 进行控制)。在 JS 平台上有一个类似的功能(MDN doc here),你有@JsName 来处理方法重命名。

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

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

有一个功能请求这个功能here,但是没有得到太多关注

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多