Kotlin 中的 "package" 和 "module" 有什么区别?

What is the difference between "package" and "module" in Kotlin?

就Kotlin而言,包和模块有什么区别?

当谈到顶级代码的可见性修饰符时,internal 修饰符只允许同一模块内代码的可访问性。这使得包和模块看起来是同一回事,但我不确定。

问题 没有回答我的问题,因为它没有将模块和包置于同一上下文中。

简答:包收集相关的classes,大致对应目录;而模块的级别更高,对应于项目 and/or 编译器运行。

更长的答案:

在Java和Kotlin中,classes被安排成包。它们是使用每个文件顶部的 package 指令设置的。 (在 Java 中,这与存储它们的目录结构完全对应;这在 Kotlin 中也很常见,尽管不是严格要求的。)

它们提供了一种对相关 classes 进行分组的方法:您可以直接在同一包中引用 classes(以及顶级函数和字段),而所有其他 classes 需要 imported,或者它们的完全限定名称 (package.packageclass) 使用。在 Java 的最新版本中,您可以“密封”一个包,这意味着以后没有其他人可以向其中添加 classes。

另一方面,模块对于 Kotlin 来说是新的。它们是一个更高层次的概念,将程序或库中的所有 classes 集合在一起。 (一些 IDE 和工具将其称为“项目”或“源集”。)模块中的所有文件必须一起编译,结果通常收集到 .jar(或 .war)文件中。

一个大系统可能由几个模块组成,但每个模块可能包含数十个包。

更具体地说,模块是一组编译在一起的 Kotlin 文件。它在包之上。另一方面,包是将相关 类.

分组的文件夹