在 Kotlin 中使用哪个标准库

Which standard library to use in Kotlin

在Kotlin中,在使用JVM时,标准库似乎有多种选择,即kotlin-stdlibkotlin-stdlib-jdk7kotlin-stdlib-jdk8

但是,我找不到任何东西告诉我它们之间的区别。 我发现的唯一可见区别是我不能将 com.fasterxml.jackson.databind.exc.MismatchedInputExceptionkotlin-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://github.com/JetBrains/kotlin/blob/55c8b35eee2ee8a93ccaffeaac6f9c3e4fd4ff18/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt#L27

编辑:我很好奇所以写了一篇关于这个的文章:https://medium.com/@mbonnin/the-different-kotlin-stdlibs-explained-83d7c6bf293。 底线:Android 声明了一个奇怪的 JVM 版本,因此几乎没有使用 -jdk7-jdk8 中的任何内容。