假设Kotlin中的模块意味着一个项目(虽然很高兴看到Kotlin模块的确切定义意味着什么......从文档中不清楚)......
Kotlin可见性修饰符是否有效。我有两个项目,一个主项目和一个测试项目,具有不同的,不重叠的包路径。测试项目依赖于主项目(在Eclipse中)。主项目中的接口或类是否标记为public
似乎并不重要。在测试项目中,主项目接口/类是可见的/可访问的,无论是什么。如果您标记主要项目private
,则会出现唯一的差异,然后会出现可见性问题。但有或没有public
它似乎没有任何区别。
根据我从文档中可以看出,在界面或类上省略可见性修饰符会影响默认可见性,即internal
。
答案 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模块声明。