【问题标题】:Which standard library to use in Kotlin在 Kotlin 中使用哪个标准库
【发布时间】:2019-01-22 07:47:27
【问题描述】:

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

但是,我找不到任何可以告诉我这些之间的区别的东西。 我发现的唯一明显区别是我不能将com.fasterxml.jackson.databind.exc.MismatchedInputExceptionkotlin-stdlib 一起使用,但我可以与kotlin-stdlib-jdk8 一起使用。

有没有什么地方我可以读到使用其中一个的优势,或者任何人都可以用外行的方式解释这一点?

【问题讨论】:

    标签: kotlin standard-library


    【解决方案1】:

    大部分标准库都在普通的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 的任何内容。

    【讨论】:

      【解决方案2】:

      通过在您的 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
      
      ...
      

      【讨论】:

        【解决方案3】:

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

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

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

        所以,简而言之,使用与您的 JDK 匹配的那个。将其添加到依赖项也将传递地添加旧版本 JDK 的所有依赖项。

        【讨论】:

        • 从没想过阅读他们的 pom,但我明白你在依赖关系和传递性方面的观点。然而,我仍然希望 Kotlin 页面上有更好的文档。
        猜你喜欢
        • 2019-12-22
        • 2019-10-04
        • 1970-01-01
        • 2016-04-11
        • 1970-01-01
        • 2019-04-05
        • 2017-09-01
        • 2021-04-01
        • 1970-01-01
        相关资源
        最近更新 更多