就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不能回答我的问题,因为它不会将模块和包引入相同的上下文中。
答案 0 :(得分:3)
简短的回答:软件包收集相关的类,并大致对应于目录;而模块的级别更高,并且对应于项目和/或编译器运行。
更长的答案:
在Java和Kotlin中,类被安排在包中。使用每个文件顶部的package
伪指令设置它们。 (在Java中,这完全对应于存储它们的目录结构;尽管并非严格要求,但这在Kotlin中也是常见的。)
它们提供了一种对相关类进行分组的方式:您可以直接引用同一包中的类(以及顶级函数和字段),而所有其他类都需要import
或完全对其进行分类。使用限定名称( package 。 package ... class )。并且在最新版本的Java中,您可以“密封”一个程序包,这意味着以后没有其他人可以向其中添加类。
另一方面,模块对于Kotlin来说是新的。它们是更高层次的概念,将程序或库中的所有类收集在一起。 (某些IDE和工具将其称为“项目”或“源集”。)模块中的所有文件必须一起编译,并且通常将结果收集到.jar(或.war)文件中。
一个大型系统可能包含少量模块,但是每个模块都可能包含数十个软件包。
答案 1 :(得分:2)
更具体地说,模块是一起编译的一组Kotlin文件。它位于包装的顶部。另一方面,软件包是将相关类分组的文件夹。