使用 ASM 从 Java 库在 Kotlin class 上创建代理
Make proxy on Kotlin class from a Java library using ASM
我有一个使用 ASM 创建代理的 Java 库。
有一次,用户向它发送了一个 Kotlin class。我可以检测到它是来自 Java 的 Kotlin class,但我不知道如何从中创建代理?我从这样的地方读到的一切class都是毫无意义的。
场景如下
- 用户发送 Kotlin class
- 我做了代理
- 最后,我做了一个这样的实例class
最好的方法是什么?
编辑
我刚刚意识到我不能覆盖 Kotlin 函数的原因之一是因为它们在字节码中生成为 final
方法。有没有办法告诉 Kotlin 不要这样做?
我遇到的问题是生成了 类,方法是 final
。我使用的 ASM 代码没有处理最终方法,因为它们无法被覆盖。
解决方法是将类和Kotlin中的函数标记为open
。您可以手动执行此操作或使用 all-open
插件。
这是解释该问题的页面:https://blog.frankel.ch/open-your-classes-and-methods-in-kotlin/
我有一个使用 ASM 创建代理的 Java 库。
有一次,用户向它发送了一个 Kotlin class。我可以检测到它是来自 Java 的 Kotlin class,但我不知道如何从中创建代理?我从这样的地方读到的一切class都是毫无意义的。
场景如下
- 用户发送 Kotlin class
- 我做了代理
- 最后,我做了一个这样的实例class
最好的方法是什么?
编辑
我刚刚意识到我不能覆盖 Kotlin 函数的原因之一是因为它们在字节码中生成为 final
方法。有没有办法告诉 Kotlin 不要这样做?
我遇到的问题是生成了 类,方法是 final
。我使用的 ASM 代码没有处理最终方法,因为它们无法被覆盖。
解决方法是将类和Kotlin中的函数标记为open
。您可以手动执行此操作或使用 all-open
插件。
这是解释该问题的页面:https://blog.frankel.ch/open-your-classes-and-methods-in-kotlin/