gpt4 book ai didi

kotlin - 如何在 Kotlin 常用代码中创建动态代理?

转载 作者:行者123 更新时间:2023-12-02 00:55:52 29 4
gpt4 key购买 nike

如果我在 JVM 上,我可以这样做:

object Playground {

class DynamicInvocationHandler : InvocationHandler {

@Throws(Throwable::class)
override operator fun invoke(proxy: Any, method: Method, args: Array<Any>): Any {
LOGGER.info("Invoked method: {}", method.name)

return 42
}

companion object {

private val LOGGER = LoggerFactory.getLogger(
DynamicInvocationHandler::class.java)
}
}

@JvmStatic
fun main(args: Array<String>) {
val proxy = Proxy.newProxyInstance(
Playground::class.java.classLoader,
arrayOf<Class<*>>(MutableMap::class.java),
DynamicInvocationHandler()) as MutableMap<String, String>

proxy["foo"] = "bar"
}
}

运行它会打印出 Invoked method: put .我怎样才能在 Kotlin 中做这样的事情 常见 项目?

编辑:我不想在我的公共(public)模块中使用 Java 中的任何东西。我知道常见的项目是如何运作的。相反,我感兴趣的是是否有基于 Kotlin 的解决方案。

编辑 2:我不想代理 Map类(class)。我正在寻找类似 Proxy 的内容在我可以用来代理 的JDK中任意接口(interface) .对困惑感到抱歉。

最佳答案

我认为简单的答案是 Kotlin 多平台反射不支持代理。您可以使用@KamiSempai 的expect - actual在 java 应用程序中使用公共(public)模块时的解决方案,但您需要找到 JS 和 native 目标的替代方案。

关于kotlin - 如何在 Kotlin 常用代码中创建动态代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327143/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com