Kotlin中的“内部”可见性修饰符工作吗?

假设Kotlin中的模块意味着一个项目(尽管很高兴看到Kotlin模块的确切定义意味着……不清楚从文档)…

Kotlin可见性修饰符是否还能工作? 我有两个项目,一个主项目和一个测试项目,具有不同的,不重叠的包路径。 测试项目依赖于主项目(在Eclipse中)。 主项目中的接口或类是否被标记为public标记并不重要。 在测试项目中,主要的项目接口/类是可见/可访问的,不管它是什么。 唯一的区别是,如果您将主项目标记为private ,那么存在可见性问题。 但是无论是否public这似乎都没有什么区别。

从我能从文档中得出的结果,在接口或类上省略可见性修饰符会影响默认的可见性,即internal

在当前的Kotlin中, internal可见性修饰符确实被强制执行。

在Kotlin 1.0 Beta RC版本中,它表示:

可见性检查受到限制,例如,公开声明不能公开本地,私人或内部类型。 在编译器和IDE中检查对内部声明的访问;

而相关的发行说明有两点支持:

  • 在编译器中检查内部可见性
  • 内部函数和属性的名称被破坏(java互操作)

最后一点对于帮助阻止Java查看内部作用域标识符并与其交互至关重要。

在Kotlin M14发布公告中还提到:

  • 内部是在编译器中检查(不仅IDE)
  • 受保护的内部成员被禁止在接口中

再往后Kotlin M13的发布声明还显示:

  • 现在可以在模块外面检查内部访问(详情如下)。
  • 默认可见性(无修饰符)从内部变为公共,
  • 我们最终启用了拒绝在模块外部使用内部声明的检查。

所以显然是功能和工作。

值得一提的是,它仅适用于Kotlin模块,但仍然可以访问来自Java模块的“内部”声明,尽管它显示了检查报告(警告)。

https://youtrack.jetbrains.com/issue/KT-19053