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

Ine*_*nso 4 class protected kotlin

In Java package protectedAccess 非常方便,因为它允许编写模块化代码。这是不可能的,Kotlin除非您将所有这些类粘贴到一个文件中并将Private它们全部放入或Internal在单独的Module. 但我不喜欢这个解决方案。将大量内容放入一个文件中是不可读的,另一个问题是您无法测试任何Method不可读Class的内容Public。还有其他解决方案吗?

The*_*tor 6

不,不支持受包保护的访问。

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

Kotlin 开发人员不提供受包保护的可见性说明符的动机如下:

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

您绝对可以测试具有内部访问权限的方法/类:模块的测试可以完全访问该模块的内部声明。

  • 在 JVM 中,可以反编译和修改字节码来完成几乎所有的事情;封装主要不是为了安全而设计的。有人可能会说,使用相同的包来获取访问权限太容易了(即 API 设计的问题),但我更相信 Kotlin 想要保持简单,而“internal”更强大,因为它允许您有效地隐藏类库的 API,而 Java 类一旦从另一个包(在同一模块中)访问,就需要公开。因此,多个 Java“公共”类可以是 Kotlin 中的“内部”类。 (5认同)