kotlin 的哪个特性可以通过 java 代理来替代方法拦截
Which feature of kotlin can be used as a replacedment of method interception via java proxies
在 java 中,如果我想 拦截 class 上的方法调用 ,我可以使用 Proxy.newProxyInstance()
并提供一个 InvocationHandler
实施 invoke()
.
我看到在 kotlin 中您可以使用 委托属性 来拦截 属性 访问。
kotlin 是否有任何特性可用于为方法提供类似的功能?
Kotlin 没有标准统一的创建方式Proxies
。在使用 K/JVM 平台时,您仍然可以使用 Proxy.newProxyInstance()
,但请记住,Kotlin 编译器将使用 generate/rename 方法(您可以使用 @JvmName
来控制它)。在 JS 平台上有一个有点类似的功能(MDN doc here),你有 @JsName
来处理方法重命名。
至于 Native,(据我所知)没有办法做到这一点,因为没有实现反射。
委派的目标不是提供代理的替代方案,但在某些用例中您可能会逃避它们。
有此功能的功能请求here,但没有受到太多关注
在 java 中,如果我想 拦截 class 上的方法调用 ,我可以使用 Proxy.newProxyInstance()
并提供一个 InvocationHandler
实施 invoke()
.
我看到在 kotlin 中您可以使用 委托属性 来拦截 属性 访问。
kotlin 是否有任何特性可用于为方法提供类似的功能?
Kotlin 没有标准统一的创建方式Proxies
。在使用 K/JVM 平台时,您仍然可以使用 Proxy.newProxyInstance()
,但请记住,Kotlin 编译器将使用 generate/rename 方法(您可以使用 @JvmName
来控制它)。在 JS 平台上有一个有点类似的功能(MDN doc here),你有 @JsName
来处理方法重命名。
至于 Native,(据我所知)没有办法做到这一点,因为没有实现反射。
委派的目标不是提供代理的替代方案,但在某些用例中您可能会逃避它们。
有此功能的功能请求here,但没有受到太多关注