Java和Kotlin的模块系统之间有区别吗?

时间:2019-04-07 07:02:43

标签: java kotlin

作为Java和Kotlin的初学者,我对模块系统都很困惑,想知道Java和Kotlin之间是否有区别。

什么是模块?甲骨文说:

  

模块化在软件包之上增加了更高级别的聚合。钥匙   新的语言元素是模块-唯一命名的,可重复使用的组   相关软件包以及资源(例如图像和XML文件)   和一个模块描述符指定

     
      
  • 模块名称
  •   
  • 模块的依赖关系(即该模块依赖的其他模块)
  •   
  • 它显式提供给其他模块的软件包(该模块中的所有其他软件包隐式地对其他模块不可用)
  •   
  • 它提供的服务
  •   
  • 消费的服务
  •   
  • 它还可以反射其他哪些模块
  •   

来源:https://www.oracle.com/corporate/features/understanding-java-9-modules.html

在科特林的书中,一个模块是:

  

模块是一起编译在一起的一组Kotlin文件:

     
      
  • 一个IntelliJ IDEA模块;
  •   
  • 一个Maven项目;
  •   
  • Gradle源集(测试源集可以访问main的内部声明除外);
  •   
  • 通过调用<kotlinc> Ant任务编译的一组文件。
  •   

来源:https://kotlinlang.org/docs/reference/visibility-modifiers.html#modules

我的问题:

  • Java和Kotlin的模块系统之间是否有区别?如果是,那么到底如何?
  • 何时使用/不使用模块是否有一些“最佳实践”?
  • 在带有Java和Kotlin代码的项目中,Kotlin的internal关键字如何表现?

1 个答案:

答案 0 :(得分:1)

不幸的是,科特林团队似乎决定使用相同的术语来组织一系列可以组合在一起的事物。

“真正的” Java模块更定义了一个概念,该概念在jvm内的运行时定义了类的分组!这是一种更大的体系结构方法。它旨在将大型应用程序分割为组件,并使用复杂的系统来处理这些组件之间的依赖关系。

换句话说:相同的词,但是两种不同的含义,彼此之间并不真正相关。从这个角度来看,您必须深入研究这两个概念,以了解每个概念都适用。

从这种角度来看:当您是Kotlin程序员,并且打算部署将在Java9(或更新版本)JVM上运行的大型应用程序时,您肯定要确保您的可交付成果分组在合理的“ Java模块”中。否则,如果您进行普通的Kotlin开发,而对执行环境没有特定要求,则您可能主要(仅)担心“ Kotlin模块”。