Class Kotlin是否支持包保护的可见性?

Class Kotlin是否支持包保护的可见性?,class,kotlin,protected,Class,Kotlin,Protected,在Javapackage-protected中,访问非常方便,因为它允许编写模块化代码。这对于Kotlin是不可能的,除非您将所有这些类粘贴到一个文件中,并将Private放在所有这些类上,或者通过在单独的模块中实现Internal。但我不喜欢这种解决方案。将大量内容放在一个文件中是不可读的,另一个问题是您无法测试任何非公共的方法/类。是否有其他解决方案?否,不支持包保护访问 您应该在Kotlin中使用internal。这限制了对同一模块的访问,该模块是一个逻辑单元,将文件编译到一个工件中 不提

Java
package-protected
中,访问非常方便,因为它允许编写模块化代码。这对于
Kotlin
是不可能的,除非您将所有这些类粘贴到一个文件中,并将
Private
放在所有这些类上,或者通过在单独的
模块中实现
Internal
。但我不喜欢这种解决方案。将大量内容放在一个文件中是不可读的,另一个问题是您无法测试任何非
公共的
方法
/
。是否有其他解决方案?

否,不支持包保护访问

您应该在Kotlin中使用
internal
。这限制了对同一模块的访问,该模块是一个逻辑单元,将文件编译到一个工件中

不提供包保护的可见性说明符的动机如下:

没有包保护访问的动机非常简单:它不提供任何真正的封装。系统中的任何其他模块都可以在与复杂独立组件相同的包中定义类,并可以完全访问其内部。另一方面,具有内部可见性的类不能从定义它们的模块之外的任何模块访问

而且您肯定可以测试具有内部访问权限的方法/类:模块的测试可以完全访问该模块的内部声明


这回答了你的问题吗?我不明白答案的重点。我想他们提出了我所说的,我不想这样做。有一个功能要求包私有可见性或等效的:。这是一个很好的答案。尽管我发现很难接受Kotlin dev的推理。是的,由于名称混乱,从模块外部访问内部方法/类并不容易;但对于一个意志坚定的攻击者来说,这肯定是可能的。所以它没有提供任何真正的安全性。使用Java8的密封包,可以安全地实施包保护;封装主要不是为了安全而设计的。有人可能会说,使用同一个包获取访问权限太容易了(即API设计的问题),但我更相信Kotlin希望保持简单,
internal
更强大,因为它允许您有效地从库的API隐藏类,而Java类需要在从另一个包(在同一模块中)访问时立即公开。因此,在Kotlin中,几个Java
public
类可以是
internal