在 Kotlin 中使用哪个标准库
Which standard library to use in Kotlin
在Kotlin中,在使用JVM时,标准库似乎有多种选择,即kotlin-stdlib
、kotlin-stdlib-jdk7
和kotlin-stdlib-jdk8
。
但是,我找不到任何东西告诉我它们之间的区别。
我发现的唯一可见区别是我不能将 com.fasterxml.jackson.databind.exc.MismatchedInputException
与 kotlin-stdlib
一起使用,但我可以将 kotlin-stdlib-jdk8
.
有什么地方可以让我了解使用其中一种的优势,或者谁能通俗易懂地解释一下?
顾名思义,使用JDK8时应该使用-jdk8。它包含用于将 JDK 8 中所做的更改集成到 Kotlin 标准库中的代码。
如其 pom 所示,它依赖于 -jdk7,其中包含将 JDK 7 中所做的更改集成到 Kotlin 标准库中所需的代码。
并且如-jdk7 的 pom 所示,它取决于 stdlib。
所以,简而言之,使用与您的 JDK 匹配的那个。将它添加到依赖项中也将传递地添加 JDK.
先前版本的所有依赖项
通过 运行 Gradle dependencies
task 在你的 Kotlin 项目中,你可以找到一些有用的信息。这是示例项目中输出的一部分:
$ ./gradlew dependencies
...
kotlinCompilerClasspath
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.20
+--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20
| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20
| \--- org.jetbrains:annotations:13.0
+--- org.jetbrains.kotlin:kotlin-script-runtime:1.3.20
+--- org.jetbrains.kotlin:kotlin-reflect:1.3.20
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 (*)
\--- org.jetbrains.intellij.deps:trove4j:1.0.20181211
...
大多数标准库都在普通的 kotlin-stdlib
工件中。
kotlin-stdlib-jdk7
添加抑制异常和一些扩展方法。
kotlin-stdlib-jdk8
添加了 ThreadLocalRandom 以及其他一些扩展方法,并在正则表达式中按名称检索组。
编辑:我很好奇所以写了一篇关于这个的文章:https://medium.com/@mbonnin/the-different-kotlin-stdlibs-explained-83d7c6bf293。
底线:Android 声明了一个奇怪的 JVM 版本,因此几乎没有使用 -jdk7
和 -jdk8
中的任何内容。
在Kotlin中,在使用JVM时,标准库似乎有多种选择,即kotlin-stdlib
、kotlin-stdlib-jdk7
和kotlin-stdlib-jdk8
。
但是,我找不到任何东西告诉我它们之间的区别。
我发现的唯一可见区别是我不能将 com.fasterxml.jackson.databind.exc.MismatchedInputException
与 kotlin-stdlib
一起使用,但我可以将 kotlin-stdlib-jdk8
.
有什么地方可以让我了解使用其中一种的优势,或者谁能通俗易懂地解释一下?
顾名思义,使用JDK8时应该使用-jdk8。它包含用于将 JDK 8 中所做的更改集成到 Kotlin 标准库中的代码。
如其 pom 所示,它依赖于 -jdk7,其中包含将 JDK 7 中所做的更改集成到 Kotlin 标准库中所需的代码。
并且如-jdk7 的 pom 所示,它取决于 stdlib。
所以,简而言之,使用与您的 JDK 匹配的那个。将它添加到依赖项中也将传递地添加 JDK.
先前版本的所有依赖项通过 运行 Gradle dependencies
task 在你的 Kotlin 项目中,你可以找到一些有用的信息。这是示例项目中输出的一部分:
$ ./gradlew dependencies
...
kotlinCompilerClasspath
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.20
+--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20
| +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20
| \--- org.jetbrains:annotations:13.0
+--- org.jetbrains.kotlin:kotlin-script-runtime:1.3.20
+--- org.jetbrains.kotlin:kotlin-reflect:1.3.20
| \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.20 (*)
\--- org.jetbrains.intellij.deps:trove4j:1.0.20181211
...
大多数标准库都在普通的 kotlin-stdlib
工件中。
kotlin-stdlib-jdk7
添加抑制异常和一些扩展方法。
kotlin-stdlib-jdk8
添加了 ThreadLocalRandom 以及其他一些扩展方法,并在正则表达式中按名称检索组。
编辑:我很好奇所以写了一篇关于这个的文章:https://medium.com/@mbonnin/the-different-kotlin-stdlibs-explained-83d7c6bf293。
底线:Android 声明了一个奇怪的 JVM 版本,因此几乎没有使用 -jdk7
和 -jdk8
中的任何内容。