【问题标题】:Scope of internal visibility modifier in KotlinKotlin 中内部可见性修饰符的范围
【发布时间】:2014-11-06 22:19:15
【问题描述】:

我在理解内部访问修饰符时遇到了问题。在我的示例中,我无法产生任何行为与公开不同的情况。即使我创建了一个 jar,我也可以从 jar 外部访问 jar 中的内部函数(来自与 jar 中使用的包无关的不同包)。在文档中使用了术语模块,但我无法找出模块的确切含义。

因此我的问题是:

  1. kotlin 中的模块是什么?

  2. 访问修饰符 internal 与 public 修饰符有何不同?

【问题讨论】:

    标签: visibility kotlin


    【解决方案1】:

    Kotlin 编译器版本 M8 (0.8.11) 会忽略模块,更准确地说,它就像您的所有代码都放入同一个模块一样工作,这就是为什么您无法收到 internal 的可见性错误。

    从下一个里程碑版本开始,您创建的每个 IDE 模块都有自己的可见性范围,当您尝试从另一个模块中的一个模块访问 internal 声明时,您会收到错误消息。另一方面,公众在整个项目中都是可见的。

    更新:这个在 M8 中没有开启,推迟到以后

    更新:从later Kotlin milestones and betas开始,此功能已开启

    【讨论】:

    • 你说的“IDE模块”是什么意思?
    • 用 IntelliJ IDEA 的话来说:当你在 IDE 中打开一个项目时,它有许多模块,每个模块都有许多源根和依赖项/类路径。
    • 现在清楚了,对我来说这与 Java 的“包私有”概念有点混淆。
    • 仅供参考,找不到internal 可见性修饰符的太多用途。每个“清洁架构”方法的典型项目结构是高度模块化的,这意味着,例如,域实体和服务位于独立模块中,并且它们的属性和功能(private 除外)必须声明为public 才能跨模块的边界。对我来说,这是对源代码中public 关键字的入侵。有什么建议可以让它不那么冗长吗?
    • 是的,我们计划在下一个里程碑中最终启用它们
    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 2019-04-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-24
    • 2021-11-18
    相关资源
    最近更新 更多