是"内部" Kotlin工作中的能见度修正器呢?

时间:2015-06-21 09:27:54

标签: kotlin

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

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

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

2 个答案:

答案 0 :(得分: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也会显示:

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

所以它显然是有效的和有效的。

答案 1 :(得分:0)

值得注意的一点是,它仅适用于Kotlin模块,但访问"内部"虽然它显示了检查报告(警告),但仍可以从Java模块声明。

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