在Kotlin中使用哪个标准库

时间:2018-08-15 12:20:25

标签: kotlin standard-library

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

但是,我什么也找不到告诉我两者之间的区别。 我发现的唯一可见区别是我不能将com.fasterxml.jackson.databind.exc.MismatchedInputExceptionkotlin-stdlib一起使用,但是可以与kotlin-stdlib-jdk8一起使用。

在任何地方我都可以使用一个优势来了解其优势,或者有人可以通俗易懂地解释这一优势?

3 个答案:

答案 0 :(得分:4)

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

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

-jdk7的pom表示,它取决于stdlib。

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

答案 1 :(得分:0)

通过在Kotlin项目中运行Gradle dependencies任务,您可以找到一些有用的信息。这是示例项目中输出的一部分:

$ ./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

...

答案 2 :(得分:0)

大多数stdlib位于普通的kotlin-stdlib中。

kotlin-stdlib-jdk7添加了抑制的异常和一些扩展方法。

kotlib-stdlib-jdk8添加ThreadLocalRandom以及其他一些扩展方法,并在Regexes中按名称检索组。

代码在那里:https://github.com/JetBrains/kotlin/blob/55c8b35eee2ee8a93ccaffeaac6f9c3e4fd4ff18/libraries/stdlib/jvm/src/kotlin/internal/PlatformImplementations.kt#L27