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

Ali*_*uis 5 java kotlin

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

\n\n

到底什么是模块?甲骨文说:

\n\n
\n

模块化在包之上添加了更高级别的聚合。关键的新语言元素是模块\xe2\x80\x94a 唯一命名的、可重用的相关包组,以及资源(例如图像和 XML 文件)\n 以及指定的模块描述符

\n\n
    \n
  • 模块\xe2\x80\x99s 名称
  • \n
  • module\xe2\x80\x99s 依赖项(即该模块依赖的其他模块)
  • \n
  • 它显式提供给其他模块使用的包(模块中的所有其他包对其他模块隐式不可用)
  • \n
  • 它提供的服务
  • \n
  • 它消耗的服务
  • \n
  • 它允许反射到哪些其他模块
  • \n
\n
\n\n

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

\n\n

在 Kotlin 的书中,模块是:

\n\n
\n

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

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

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

\n\n

我的问题:

\n\n
    \n
  • Java 和 Kotlin 的模块系统有区别吗?如果是,具体如何?
  • \n
  • 何时使用/不使用模块是否有一些“最佳实践”?
  • \n
  • Kotlin 的internal关键字在同时包含 Java 和 Kotlin 代码的项目中表现如何?
  • \n
\n

Gho*_*ica 6

不幸的是,Kotlin 团队似乎决定使用相同的术语来组织一组一起构建的东西。

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

换句话说:同一个词,但有两种不同的含义,彼此之间没有真正的联系。从这个角度来看,您必须深入研究这两个概念,以了解每个概念的适用范围。

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