Kotlin1.8新特性

2023-10-27

Kotlin1.8.0新特性

新特性概述

  • JVM 的新实验性功能:递归复制或删除目录内容
  • 提升了 kotlin-reflect 性能
  • 新的 -Xdebug 编译器选项,提供更出色的调试体验
  • kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib
  • 提升了 Objective-C/Swift 互操作性
  • 与 Gradle 7.3 兼容

在这里插入图片描述

递归复制或删除目录内容

注意:
这些新功能对于`java.nio.file.path`来说是实验性的。如果要调用他们,你需要添加`@OptIn(kotlin.io.path.ExperimentalPathApi::class)`或者`@kotlin.io.path.ExperimentalPathApi`注释。你也可以添加编译器选项`-opt-in=kotlin.io.path.ExperimentalPathApi`。

两个扩展函数,它允许你递归:
java.nio.file.PathcopyToRecursively() deleteRecursively()

  • 将目录及其内容复制到另一个目标。
  • 删除目录及其内容。
    作为备份过程的一部分,这些功能非常有用。
    异常处理
copyToRecursively() onError

例如:

sourceRoot.copyToRecursively(destinationRoot, followLinks = false,
    onError = { source, target, exception ->
        logger.logError(exception, "Failed to copy $source to $target")
        OnErrorResult.TERMINATE
    })

使用 时,如果在删除文件或文件夹时发生异常,则会跳过该文件或文件夹。删除完成后,将引发包含作为抑制异常发生的所有异常。deleteRecursively() deleteRecursively() IOException
文件覆盖
如果发现目标目录中已存在文件,则会发生异常。如果要覆盖该文件,请使用 with 作为参数的重载并将其设置为 :
copyToRecursively() overwrite true
例如:

fun setUpEnvironment(projectDirectory: Path, fixtureName: String) {
    fixturesRoot.resolve(COMMON_FIXTURE_NAME)
        .copyToRecursively(projectDirectory, followLinks = false)
    fixturesRoot.resolve(fixtureName)
        .copyToRecursively(projectDirectory, followLinks = false,
          overwrite = true) // patches the common fixture
}

自定义复制操作
重载copyAction, 例如:

sourceRoot.copyToRecursively(destinationRoot, followLinks = false) { source, target ->
    if (source.name.startsWith(".")) {
        CopyActionResult.SKIP_SUBTREE
    } else {
        source.copyToIgnoringExistingDirectory(target, followLinks = false)
        CopyActionResult.CONTINUE
    }
}

提升了 kotlin-reflect 性能

利用现在使用 JVM 目标 1.8 编译的事实,我们将内部缓存机制迁移到 Java 的 .以前我们只缓存 ,但现在我们也缓存和.这些更改在调用 时显著提高了性能。kotlin-reflect ClassValue KClass KType KDeclarationContainer typeOf()

新的 -Xdebug 编译器选项

Kotlin 1.8.0 添加了一个新的编译器选项,该选项禁用优化以获得更好的调试体验。目前,该选项禁用协程的“已优化”功能。将来,在我们添加更多优化后,此选项也会禁用它们。-Xdebug
“已优化”功能可在使用挂起函数时优化变量。但是,很难使用优化变量调试代码,因为看不到它们的值。
禁止在生产环境中使用该选项,可能会产生内存泄露。

kotlin-stdlib-jdk7kotlin-stdlib-jdk8 合并为 kotlin-stdlib

不同版本的stdlib已统一合并到kotlin-stdlib

提升了Object及Swift的互操作

为了使 Kotlin 与 Objective-C 和 Swift 更具互操作性,添加了三个新的注释:

  • @ObjCName 允许您在 Swift 或 Objective-C 中指定一个更惯用的名称,而不是重命名 Kotlin 声明。
    该注释指示 Kotlin 编译器为此类、属性、参数或函数使用自定义的 Objective-C 和 Swift 名称:
@ObjCName(swiftName = "MySwiftArray")
class MyKotlinArray {
    @ObjCName("index")
    fun indexOf(@ObjCName("of") element: String): Int = TODO()
}

// Usage with the ObjCName annotations
let array = MySwiftArray()
let index = array.index(of: "element")
  • @HiddenFromObjC允许您从 Objective-C 中隐藏 Kotlin 声明。

注释指示 Kotlin 编译器不要将函数或属性导出到 Objective-C 并因此导出到 Swift。这可以使您的 Kotlin 代码对 Objective-C/Swift 更加友好。

  • @ShouldRefineInSwift 对于用 Swift 编写的包装器替换 Kotlin 声明很有用。

注释指示 Kotlin 编译器将函数或属性标记为生成的 Objective-C API 中的函数或属性。这样的声明获得前缀,这使得它们对 Swift 代码不可见。swift_private__

与 Gradle 7.3 兼容

Kotlin 1.8.0 完全支持 Gradle 版本 7.2 和 7.3。您也可以使用 Gradle 版本至最新的 Gradle 版本,但如果您这样做,请注意,您可能会遇到弃用警告,或者某些新的 Gradle 功能可能无法使用。

此版本带来了许多更改:

  • 将 Kotlin 编译器选项公开为 Gradle 惰性属性

  • 提高支持的最低版本
    从 Kotlin 1.8.0 开始,支持的最低 Gradle 版本为 6.8.3,支持的最低 Android Gradle 插件版本为 4.1.3。
    gradle插件版本与gradle版本的对应关系如下
    https://kotlinlang.org/docs/gradle-configure-project.html#apply-the-plugin

  • 能够禁用 Kotlin 守护进程回退策略

kotlin.daemon.useFallbackStrategy true false  useDaemonFallbackStrategy

编译通常运行在gradle守护进程上,如果守护进程因为某些原因挂掉了,那么还可以在守护进程之外编译运行。

  • 在传递依赖项中使用最新的 kotlin-stdlib 版本
    通过以下选项对齐kotlin版本
kotlin.stdlib.jdk.variants.version.alignment=false
//或者
implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
  • 强制检查相关 Kotlin 和 Java 编译任务的 JVM 目标兼容性相等性

  • 解决 Kotlin Gradle 插件的传递依赖关系
    为避免传递依赖中版本不一致导致编译出错,添加下列选项来进行约束

dependencies {
    constraints {
        implementation("org.jetbrains.kotlin:kotlin-sam-with-receiver:1.8.0")
    }
}
  • 弃用和移除
    具体查看如下链接:
    https://kotlinlang.org/docs/whatsnew18.html#deprecations-and-removals

参考

https://kotlinlang.org/docs/whatsnew18.html
https://kotlinlang.org/docs/whatsnew-eap.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin1.8新特性 的相关文章

随机推荐

  • 【YOLOX关键模块记录与解读】YOLOX: Exceeding YOLO Series in 2021

    目录 前言 一 主干部分的Focus网络结构 二 解耦头 三 Mosaic数据增强 四 Anchor Free 五 SimOTA标签匹配策略 六 参考资料 前言 论文地址 https arxiv org abs 2107 08430 源码地
  • uniapp引入外部js链接

    geturl let self this const url https webrtc github io adapter adapter latest js https g alicdn com cloudcallcenter SIPml
  • jenkins安装插件失败

    更改镜像库地址 去以下地址获取当前最新的地址 http mirrors jenkins ci org status html 截取上图红框中的url 在管理插件 gt 高级 中配置成下图中的格式
  • Qt中QLineEdit(取值、赋值、字体大小颜色)、QTextEdit和QPlainTextEdit

    核心 这些东西理解就可以了 下次用的时候看下笔记 能想起来就可以了 背 也背不下来 放弃吧 QString 界面设计最常用到的组件就是QLabel和QLineEdit QLabel用于显示字符串 QLineEdit用于输入和显示字符串 两个
  • 浏览器渲染原理

    浏览器渲染原理 目录 目录 浏览器渲染原理 B S架构及其运行原理 渲染过程 defer async不会阻塞页面解析 B S架构及其运行原理 b s架构是Brower Server结构 chrome浏览器渲染速度最快不同于其他浏览器 因为c
  • Transformer入门(一)——结构

    文章目录 前言 一 Transformer的产生和基础思想 1 1 Transformer的Motivation 1 2 Transformer的原始框架 1 3 关于Decoder的补充说明 二 Encoder中重要模块的具体实现 2 1
  • webpack配置devServer配置https代理与证书

    浏览器如果需要开发某些特定功能 需要https浏览器才会给予功能权限 则开发时我们需要在https环境 下面是配置一个webpack devServer的https环境 webpack config js module exports de
  • C++构造函数/拷贝控制

    1 C 构造函数 C 中构造函数 constructor 的作用是用来控制类对象的初始化过程 构造函数的作用是初始化类对象的数据成员 无论何时只要类的对象被创建 就会执行构造函数 1 1 默认构造函数 当定义一个类对象时 如果没有为对象提供
  • Git详细安装教程

    对于Git这块 我也算是个小白 最近在学习Git 所以趁此机会详细讲解一下Git的安装教程以及安装过程中遇到的问题 也欢迎大家对其补充 共同进步 1 下载Git Git的下载地址 windows系统 http gitforwindows o
  • Laravel_arse error: syntax error, unexpected '?'

    解决办法 php的版本不对 先打开composer phar 看看版本是否符合要求 之后修改服务器的php版本 我用的是wamp套餐 把php版本修改为7 2 4 建议也把编译器里的php开发环境统一为7 2 4
  • linux中嵌套循环,linux中的嵌套循环

    嵌套循环 内循环 一条循环语句可以在循环中使用任何类型的命令 包括其他循环命令 示例1 bin bash for a 1 a lt 3 a do echo Starting loop a for b 1 b lt 3 b do echo I
  • ezStudio,易用高效的业务基础平台开发工具

    摘要 本文从业务基础平台谈起 引申出与业务基础平台息息相关的开发工具 通过对国内外开发工具现状与未来趋势的描述 引导读者对开发工具有一个较为全面的了解 最后对清华同方ezONE 易众 业务基础平台中的ezStudio开发工具作了重点介绍与说
  • java excel通用工具类

    public class ExcelUtils 有时间记得重构下 生成excel流 throws IOException param type xone 1 lr 2 public static String createExcelIO L
  • TOP16之CSRF -- 小黑超细详解+案例说明<宝藏文>

    CSRF 跨站请求伪造 很好理解 就是盗用别人的身份伪造请求发送给服务器 在未授权的情况下执行权限保护之内的操作 因为请求的一切流程都是正常操作 这也是一般不会被检测到的漏洞行为 小黑子们 撸起袖子加油干 目录 CSRF 理解 判断是否有C
  • css set a4 paper size

    HTML div class book div class page div class subpage Page 1 2 div div div class page div class subpage Page 2 2 div div
  • 基于PCL的RANSAC(随机采样一致)算法简介与示例

    前言 RANSAC Random sample consensus 随机采样一致 是3D点云拟合的一种重要的手段 可以对直线 圆 平面 圆球 圆柱等形状的点云进行拟合 其优点在于可以最大程度上减少噪声点对拟合效果的影响 一 RANSAC R
  • Python Matplotlib绘制柱状图(bar和barh函数)详解

    前言 本文的文字及图片来源于网络 仅供学习 交流使用 不具有任何商业用途 如有问题请及时联系我们以作处理 PS 如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资料以及群交流解答点击即可加入 使用 Mat
  • 如何在ASP.NET中用OWC绘制图表

    Version 1 0 StartHTML 000000201 EndHTML 000096358 StartFragment 000002217 EndFragment 000096290 StartSelection 000002217
  • 蓝桥杯模拟题

    第一题 难度系数 2 满分 50 分 编程实现 用户输入一个正整数 N 将 1 N 之间的偶数输出 样例输入 提示 以下 为背景的信息是程序输出内容 请输入一个正整数 N 10 样例输出 2 4 6 8 将程序命名为 LQ001 评分标准
  • Kotlin1.8新特性

    Kotlin1 8 0新特性 新特性概述 JVM 的新实验性功能 递归复制或删除目录内容 提升了 kotlin reflect 性能 新的 Xdebug 编译器选项 提供更出色的调试体验 kotlin stdlib jdk7 与 kotli