字节码中的内部kotlin修饰符是什么?

时间:2019-02-09 09:57:52

标签: java kotlin

  1. 如果我用kotlin创建库并用internal标记某些类,那么从maven和IDE中没有Kotlin插件的Java来看,它是公共的还是包,或者JVM具有Java没有的其他修饰符? / li>
  2. 如果我在一个模块中使用一个带有@service批注的类并将其标记为内部,并在其他模块中使用此模块,那么它有效吗?
  3. 在字节码中看起来如何?

1 个答案:

答案 0 :(得分:0)

这些声明在到达字节码时是公共的,但是它们的名称被修饰,以使Java客户端不会意外地调用它们。因此,这不是绝对安全的,但是它表明不应该调用它们。 (这在文档here中)。

例如,如果在内部标记了一个名为calculate的函数,则该函数可能在字节码中以名称calculate$modulename结尾。 (至少在某些情况下,至少根据我对此的测试,似乎确实不存在名称混乱的情况。)

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