在Java 9之前,我曾假设软件包是一种促进/强制执行代码模块化和解决命名空间问题的方法。套餐实际上解决后者的问题确实很差(com.popkernel.myproject.Employee myEmployee = new com.popkernel.myproject.Employee();
,呃)所以我主要关注的是前者的好处。
尽管软件包在执行模块化方面做得很差,但我发现它们在促进模块化方面非常有效。 "这个类属于哪个包?"一直是一个有启发性的问题,我很欣赏Java强迫我自问它。
但是现在Java 9模块已经存在,它们比包更好地强制实施模块化问题。实际上,您可以完全用模块组成一个新项目,其中每个模块包装一个包。
当然,与包相比,模块有很多额外的样板,更不用说与包不同的怪癖,只是通过检查它的.java文件就不可能分辨出一个类所属的模块。
因此,我一起使用包和模块的计划是:当我编写代码时,将相关概念分组到包中。然后,如果我决定分发我正在处理的代码,请将其形式化为模块。
这是一种合理利用这些概念的理智方式吗?
答案 0 :(得分:1)
这是一种合理利用这些概念的理智方式吗?
是,有点儿。虽然您可以通过模块化代码获得其他好处,例如可靠配置,强封装,提高可读性等。
因此,我一起使用包和模块的计划是: 当我编写代码时,将相关概念分组到包中。然后,如果我 决定我想分发我正在处理的代码,将其形式化 一个模块。
您可以问自己的一个简单问题是,当您使用模块时,以及将相关概念分组到包中,最终如何对相关包进行分组?
可能与之相匹配的答案是引入了一种新的Java程序组件 - Modules
模块是一个命名的,自描述的代码和数据集合。它的 代码被组织为包含类型的集包,即 Java类和接口;其数据包括资源和其他 各种静态信息。
到目前为止,这些集合主要针对JAR文件,这些文件被分发为在其他文件中作为依赖项/库使用,但它们正在成为传统格式,并且与模块有很大不同。在我最近对Java 9 - What is the difference between "Modules" and "JAR" files?的一个回答中,我试图详细说明差异。