Kotlin1.8新特性
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-jdk7 与 kotlin-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
相关文章:
Kotlin1.8新特性
Kotlin1.8.0新特性 新特性概述 JVM 的新实验性功能:递归复制或删除目录内容提升了 kotlin-reflect 性能新的 -Xdebug 编译器选项,提供更出色的调试体验kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并为 kotlin-stdlib提升了 Objective-C/Swift 互操作…...
【Java8】
1、接口中默认方法修饰为普通方法 在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的,由于这些修饰符都是默认的。 接口定义方法: public抽象方法需要子类实现 接口定…...
阿里 Java 程序员面试经验分享,附带个人学习笔记、路线大纲
背景经历 当时我工作近5年,明显感觉到了瓶颈期。说句不好听的成了老油条,可以每天舒服的混日子(这也有好处,有时间准备面试)。这对于个人成长不利,长此以往可能面临大龄失业。所以我觉得需要痛下决心改变一…...
十大算法基础——上(共有20道例题,大多数为简单题)
一、枚举(Enumerate)算法 定义:就是一个个举例出来,然后看看符不符合条件。 举例:一个数组中的数互不相同,求其中和为0的数对的个数。 for (int i 0; i < n; i)for (int j 0; j < i; j)if (a[i] …...
【PAT甲级题解记录】1018 Public Bike Management (30 分)
【PAT甲级题解记录】1018 Public Bike Management (30 分) 前言 Problem:1018 Public Bike Management (30 分) Tags:dijkstra最短路径 DFS Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1018 Public Bike Managemen…...
SpringCloud————Eureka概述及单机注册中心搭建
Spring Cloud Eureka是Netflix开发的注册发现组件,本身是一个基于REST的服务。提供注册与发现,同时还提供了负载均衡、故障转移等能力。 Eureka组件的三个角色 服务中心服务提供者服务消费者 Eureka Server:服务器端。提供服务的注册和发现…...
原生django raw() 分页
def change_obj_to_dict(self,temp):dict {}dict["wxh_name"] temp.wxh_namedict["types"] temp.typesdict["subject"] temp.subjectdict["ids"] temp.ids# 虽然产品表里没有替代型号,但是通过sql语句的raw()查询可以…...
Android 9.0 Settings 搜索功能屏蔽某个app
1.概述 在9.0的系统rom产品定制化开发过程中,在系统Settings的开发功能中,最近产品需求要求去掉搜索中屏蔽某个app的搜索,就是根据包名,不让搜索出某个app., 在系统setting中,搜索功能中,根据包名过滤掉某个app的搜索功能,所以需要熟悉系统Settings中的搜索的相关功能,…...
SQL性能优化的47个小技巧,果断收藏!
1、先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化。 客户端发送一条查询语句到服务器; 服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的数据; 未命中缓存后,MySQL通…...
SE | 哇哦!让人不断感叹真香的数据格式!~
1写在前面 最近在用的包经常涉及到SummarizedExperiment格式的文件,不知道大家有没有遇到过。🤒 一开始觉得这种格式真麻烦,后面搞懂了之后发现真是香啊,爱不释手!~😜 2什么是SummarizedExperiment 这种cla…...
运行Qt后出现无法显示字库问题的解决方案
问题描述:运行后字体出现问题QFontDatabase: Cannot find font directory解决前提: 其实就是移植后字体库中是空的,字没办法进行显示本质就是我们只需要通过某种手段将QT界面中的字母所调用的库进行填充即可此处需要注意的是,必须…...
数据库浅谈之共识算法
数据库浅谈之共识算法 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是数据库浅谈系列,收录在专栏 DATABASE 中 😜😜😜 本系列阿呆将记录一些数据库领域相关的知识 …...
代码随想录算法训练营 || 贪心算法 455 376 53
Day27贪心算法基础贪心的本质是选择每一阶段的局部最优,从而达到全局最优。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。做题的时候,只要想清楚 局部最优 是什么&…...
PMP考前冲刺2.25 | 2023新征程,一举拿证
题目1-2:1.项目经理正在进行挣值分析,计算出了当前的成本偏差和进度偏差。发起人想要知道基于当前的绩效水平,完成所有工作所需的成本。项目经理应该提供以下哪一项数据?A.完工预算(BAC)B.完工估算(EAC)C.完工尚需估算(ETC)D.完工偏差(VAC)2…...
【自然语言处理】Topic Coherence You Need to Know(主题连贯度详解)
Topic Coherence You Need to Know皮皮,京哥皮皮,京哥皮皮,京哥CommunicationUniversityofChinaCommunication\ University\ of\ ChinaCommunication University of China 在大多数关于主题建模的文章中,常用主题连贯度ÿ…...
C++入门:模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,…...
【MySQL】索引常见面试题
文章目录索引常见面试题什么是索引索引的分类什么时候需要 / 不需要创建索引?有什么优化索引的方法?从数据页的角度看B 树InnoDB是如何存储数据的?B 树是如何进行查询的?为什么MySQL采用B 树作为索引?怎样的索引的数…...
【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf
【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf声明一、了解protobuf协议:二、前期准备:二、目标网站:三、开始分析:我们一句句分析:先for循环部分:后…...
Amazon S3 服务15岁生日快乐!
2021年3月14日,作为第一个发布的服务,Amazon S3 服务15周岁啦!在中国文化里,15岁是个临界点,是从“舞勺之年”到“舞象之年”的过渡。相信对于 Amazon S3 和其他的云服务15周岁也将是其迎接更加美好未来的全新起点。亚…...
【python】函数详解
注:最后有面试挑战,看看自己掌握了吗 文章目录基本函数-function模块的引用模块搜索路径不定长参数参数传递传递元组传递字典缺陷,容易改了原始数据,可以用copy()方法避免变量作用域全局变量闭包closurenonlocal 用了这个声明闭包…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
