java - 字节码中的内部 kotlin 修饰符是什么?
问题描述
- 如果我用 kotlin 创建库并用内部标记某个类,那么它在 maven 和 IDE 中没有 Kotlin 插件的 java 看起来如何,它将只是 public 或 package 或者 JVM 具有 java 没有的其他修饰符?
- 如果我在一个模块中使用一个带有@service注释的类并将其标记为内部,并在其他模块中使用这个模块,它是否有效?
- 它在字节码中看起来如何?
解决方案
这些声明在获取字节码时是公开的,但它们的名称被弄乱了,这样 Java 客户端就不会意外调用它们。所以......这不是完全安全,但它表明它们不应该被调用。(这在此处的文档中)。
例如,如果您标记一个名为calculate
internal 的函数,它可能calculate$modulename
以字节码中的名称结束。(至少根据我对此的测试,似乎确实有一些名称没有被破坏的情况。)
此外,IntelliJ 还将检测是否以internal
可见性编译了声明(因为有元数据表明这一点),并在您尝试使用它时向您显示错误。
推荐阅读
- python - 我正在尝试在 Xampp 上运行 python 脚本
- c++ - ioctl(...,, SIOCGIFDSTADDR, ...) 的问题
- unity3d - 错误 CS0103:当前上下文中不存在名称“WebCamTexture”
- python - 查找未完成形状的轮廓并将其连接在一起
- sql-update - 如何从 Azure 中的选择中进行更新?
- python - 保存由两个相同的预训练模型组成的整个模型时出现错误:“无法创建链接(名称已存在)”
- selenium-rc - 是否可以使用 selenoid 运行 selenium RC 测试?
- go - 附加到地图结构中的切片
- mongodb - mongos Socket 操作超时
- scala - 使用平面图和函数理解 Scala 代码