在Kotlin中使用哪个标准库

ber*_*uic 5 standard-library kotlin

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

但是,我找不到任何可以告诉我两者之间差异的信息。我发现的唯一可见区别是我不能com.fasterxml.jackson.databind.exc.MismatchedInputException与一起使用kotlin-stdlib,但可以与一起使用kotlin-stdlib-jdk8

有什么地方我能比其他人更了解优势,或者有人可以用通俗易懂的方式来解释这一点?

mbo*_*nin 20

大多数标准库都在普通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使用。


JB *_*zet 6

顾名思义,使用JDK8时应使用-jdk8。它包含用于将JDK 8中所做的更改集成到Kotlin标准库中的代码。

如其pom所示,它依赖于-jdk7,该文件包含将JDK 7中所做的更改集成到Kotlin标准库中所需的代码。

正如-jdk7的pom所示,它取决于stdlib。

因此,简而言之,请使用与您的JDK匹配的一个。将其添加到依赖项还将通过传递方式添加JDK早期版本的所有依赖项。

  • 从来没有想过阅读他们的 poms,但我明白你关于依赖性和传递性的观点。不过,我仍然希望 Kotlin 页面上有更好的文档。 (2认同)

Dar*_*idl 5

从 Kotlin 1.8 开始,不同的标准库已合并,您可以只使用kotlin-stdlib. 不再支持 JVM 目标 1.6 和 1.7。

\n
\n

更新了 JVM 编译目标\xef\xbb\xbf

\n

在 Kotlin 1.8.0 中,标准库(kotlin-stdlib、\nkotlin-reflect 和 kotlin-script-*)是使用 JVM 目标 1.8 编译的。\n之前,标准库是使用 JVM 目标 1.6 编译的。

\n

Kotlin 1.8.0 不再支持 JVM 目标 1.6 和 1.7。因此,您不再需要在构建脚本中单独声明 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8,因为这些工件的内容已合并到 kotlin-stdlib 中。

\n
\n

笔记

\n

如果您已在构建脚本中显式声明 kotlin-stdlib-jdk7 和 kotlin-stdlib-jdk8 作为依赖项,那么您应该将它们替换为 kotlin-stdlib。

\n
\n

请注意,混合不同版本的 stdlib 工件可能会导致\n类重复或丢失类。为了避免这种情况,Kotlin\nGradle 插件可以帮助您对齐 stdlib 版本。

\n
\n

Kotlin 1.8 中的新增功能 - 更新了 JVM 编译目标\xef\xbb\xbf

\n