Kotlin中的“程序包”和“模块”有什么区别?

时间:2019-08-16 22:26:10

标签: kotlin module package visibility

就Kotlin而言,软件包和模块之间有什么区别?

对于顶级代码的可见性修饰符,+-----+---+----+---+---+----------+ |Name | A | B | C | D | MaxValue | +-----+---+----+---+---+----------+ |Alex |5.1|-6.2| 7| 8| 8 | |John | 7| 8.3| 1| 2| 8.3 | |Alice| 5| 46| 3| 2| 46 | |Mark |-20| -11|-22| -5| -5 | +-----+---+----+---+---+----------+ 修饰符仅允许访问同一模块内的代码。这看起来好像包和模块是同一件事,但是我不确定。

问题here不能回答我的问题,因为它不会将模块和包引入相同的上下文中。

2 个答案:

答案 0 :(得分:3)

简短的回答:软件包收集相关的类,并大致对应于目录;而模块的级别更高,并且对应于项目和/或编译器运行。

更长的答案:

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

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

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

一个大型系统可能包含少量模块,但是每个模块都可能包含数十个软件包。

答案 1 :(得分:2)

更具体地说,模块是一起编译的一组Kotlin文件。它位于包装的顶部。另一方面,软件包是将相关类分组的文件夹。