【问题标题】:Make proxy on Kotlin class from a Java library using ASM使用 ASM 从 Java 库中对 Kotlin 类进行代理
【发布时间】:2018-06-10 14:17:23
【问题描述】:

我有一个使用 ASM 创建代理的 Java 库。

有一次,用户向它发送了一个 Kotlin 类。我可以检测到它是来自 Java 的 Kotlin 类,但我不知道如何从中制作代理?我从此类课程中读到的所有内容都是毫无意义的。

场景如下

  • 用户发送一个 Kotlin 类
  • 我做代理
  • 最后,我创建了一个此类的实例

最好的方法是什么?

编辑

我刚刚意识到我不能覆盖 Kotlin 函数的原因之一是因为它们是作为字节码中的 final 方法生成的。有没有办法告诉 Kotlin 不要这样做?

【问题讨论】:

  • 尝试打开 kotlin 类和方法,并检查是否对字节码中的最终方法有帮助
  • 是的。使用 open 有帮助。
  • 这里不完全清楚你在问什么。 Kotlin 类的字节码应该与 Java 类的字节码相当,所以它应该以相同的方式工作。您遇到的具体问题是什么?

标签: java kotlin kotlin-interop


【解决方案1】:

我遇到的问题是生成的类和方法是final。我使用的 ASM 代码没有处理 final 方法,因为它们不能被覆盖。

解决方案是将 Kotlin 中的类和函数标记为 open。您可以手动执行此操作,也可以使用 all-open 插件。

这是一个解释问题的页面:https://blog.frankel.ch/open-your-classes-and-methods-in-kotlin/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多