首页 文章

Kotlin中的“内部”可见性修饰符是否有效?

提问于
浏览
2

假设Kotlin中的一个模块意味着一个项目(虽然很高兴看到Kotlin模块的确切定义意味着什么......从文档中不清楚)......

Kotlin能见度调节剂是否有效 . 我有两个项目,一个主项目和一个测试项目,具有不同的,不重叠的包路径 . 测试项目依赖于主项目(在Eclipse中) . 主项目中的接口或类是否标记为 public 似乎并不重要 . 在测试项目中,主项目接口/类是可见的/可访问的,无论是什么 . 如果您将主要项目标记为 private ,则会出现唯一的差异,然后会出现可见性问题 . 但有或没有 public 它似乎没有任何区别 .

根据我从文档中可以看出,在界面或类上省略可见性修饰符会影响默认可见性,即 internal .

2 回答

  • 1

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

    Kotlin 1.0 Beta RC announcement它说:

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

    related release notes有两点支持这一点:

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

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

    Kotlin M14 release announcement它还提到:

    在编译器(不仅是IDE)中检查内部是否受到保护,并且接口中禁止内部成员

    并且回到过去的时间Kotlin M13 release announcement也显示:

    现在在模块外部检查对内部的访问(详情如下);默认可见性(无修饰符)从内部更改为公共,我们最终启用了拒绝模块外部内部声明用法的检查 .

    所以它显然是功能性和工作性的 .

  • 0

    有一点值得注意的是,它仅适用于Kotlin模块,但仍可以从Java模块访问“内部”声明,尽管它显示了检查报告(警告) .

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

相关问题