首页 > 解决方案 > 字节码中的内部 kotlin 修饰符是什么?

问题描述

  1. 如果我用 kotlin 创建库并用内部标记某个类,那么它在 maven 和 IDE 中没有 Kotlin 插件的 java 看起来如何,它将只是 public 或 package 或者 JVM 具有 java 没有的其他修饰符?
  2. 如果我在一个模块中使用一个带有@service注释的类并将其标记为内部,并在其他模块中使用这个模块,它是否有效?
  3. 它在字节码中看起来如何?

标签: javakotlin

解决方案


这些声明在获取字节码时是公开的,但它们的名称被弄乱了,这样 Java 客户端就不会意外调用它们。所以......这不是完全安全,但它表明它们不应该被调用。(这在此处的文档中)。

例如,如果您标记一个名为calculateinternal 的函数,它可能calculate$modulename以字节码中的名称结束。(至少根据我对此的测试,似乎确实有一些名称没有被破坏的情况。)

此外,IntelliJ 还将检测是否以internal可见性编译了声明(因为有元数据表明这一点),并在您尝试使用它时向您显示错误。


推荐阅读