Kotlin 中内部可见性修饰符的范围
Posted
技术标签:
【中文标题】Kotlin 中内部可见性修饰符的范围【英文标题】:Scope of internal visibility modifier in Kotlin 【发布时间】:2014-11-06 22:19:15 【问题描述】:我在理解内部访问修饰符时遇到了问题。在我的示例中,我无法产生任何行为与公开不同的情况。即使我创建了一个 jar,我也可以从 jar 外部访问 jar 中的内部函数(来自与 jar 中使用的包无关的不同包)。在文档中使用了术语模块,但我无法找出模块的确切含义。
因此我的问题是:
kotlin 中的模块是什么?
访问修饰符 internal 与 public 修饰符有何不同?
【问题讨论】:
【参考方案1】:Kotlin 编译器版本 M8 (0.8.11) 会忽略模块,更准确地说,它就像您的所有代码都放入同一个模块一样工作,这就是为什么您无法收到 internal
的可见性错误。
从下一个里程碑版本开始,您创建的每个 IDE 模块都有自己的可见性范围,当您尝试从另一个模块中的一个模块访问 internal
声明时,您会收到错误消息。另一方面,公众在整个项目中都是可见的。
更新:这个在 M8 中没有开启,推迟到以后
更新:从later Kotlin milestones and betas开始,此功能已开启
【讨论】:
你说的“IDE模块”是什么意思? 用 IntelliJ IDEA 的话来说:当你在 IDE 中打开一个项目时,它有许多模块,每个模块都有许多源根和依赖项/类路径。 现在清楚了,对我来说这与 Java 的“包私有”概念有点混淆。 仅供参考,找不到internal
可见性修饰符的太多用途。每个“清洁架构”方法的典型项目结构是高度模块化的,这意味着,例如,域实体和服务位于独立模块中,并且它们的属性和功能(private
除外)必须声明为public
才能跨模块的边界。对我来说,这是对源代码中public
关键字的入侵。有什么建议可以让它不那么冗长吗?
是的,我们计划在下一个里程碑中最终启用它们以上是关于Kotlin 中内部可见性修饰符的范围的主要内容,如果未能解决你的问题,请参考以下文章
从 internal 修饰符一探 kotlin 的可见性控制