Kotlin 新版本 1.9.0重要更新预览

news2024/11/25 15:29:21

释放 Kotlin 新版本 1.9.0 的强大功能

1. Kotlin K2编译器用于多平台

对K2编译器进行了进一步的改进,使其更加稳定。K2编译器针对JVM目标现已进入Beta版本,并且也可以在多平台项目中使用。

您可以通过将K2配置添加到项目的gradle.properties中,或者将其作为命令行参数传递给Gradle任务来尝试使用它。

// gradle.properties
kotlin.experimental.tryK2=true

// command line arguments
./gradlew build -Pkotlin.experimental.tryK2=true

注意:您可以在开发项目中尝试使用,但请不要在生产代码中使用,因为它仍处于Beta版本。

2. 语言功能和更新

Enum类中的entries属性

Enum类中引入了一个新的属性,称为entries,它将返回枚举常量的不可变列表。我们已经有了values()函数,它返回枚举常量的数组。那么它们之间有什么区别呢?嗯,values()函数返回一个新创建的、可变的枚举常量数组。另一方面,entries属性每次返回一个预分配的不可变枚举常量列表,这将减少性能开销。

enum class Vehicle {
    CAR, BIKE, TRUCK;
}

fun main(args: Array<String>) {
    val entries = Vehicle.entries
    val duplicate = Vehicle.entries
    println(entries == duplicate) // print true
    val values = Vehicle.values()
    val duplicateValues = Vehicle.values()
    println(values == duplicateValues) // print false as two array were created and it has differnt hashcode

    println(values[0]) // print CAR
    values[0] = Vehicle.TRUCK
    println(values[0]) // print TRUCK

    entries[0] = Vehicle.TRUCK // throw compile time errror
}

数据对象现在是稳定的

现在您可以在对象类中使用data关键字。您现在可以在对象中使用数据类的equalstoStringhashCode函数特性的所有优点。

支持内联构造函数上的辅助构造函数

您可以为内联类创建多个构造函数。当您希望在初始化内联类的底层属性时有一些逻辑时,这将非常有用。

@JvmInline
value class BMI(val value: Float) {

    constructor(heightInMetres: Float, weightInKg: Float) : this(weightInKg / (heightInMetres.pow(2F))) {

        check (heightInMetres == 0F) {
            "Height should be greater than 0"
        }


        check (weightInKg == 0F) {
            "Weight should be greater than 0"
        }
        
    }

}

3. 标准库更新

Kotlin Time API 现在是稳定的。将会有一篇即将发布的博文介绍如何使用 Kotlin 的新 Time API。
kotlin.io.path.Path 类引入了一个新的扩展函数 createParentDirectories()。调用此函数将创建所有未存在或未创建的父目录。我们可以利用此函数来摆脱递归检查文件夹是否存在以及文件夹创建逻辑的问题。
由于 Kotlin 1.9.0 目标 JVM 1.8,现在引入了正则表达式模式捕获组。您可以在此链接中查看详细的解释。
现在引入了一个名为 HexFormat 的新的实验性类。您可以使用它来存储十六进制数字,并且有可用于将 HexFormat 转换为字节数组、整数、长整型等的函数,反之亦然。
Volatile 注解现在适用于所有的多平台目标。它仅仅是一个标记注解,用于使变量/函数具有原子性(线程安全)。在 1.9.0 之前,它仅适用于 JVM。
现在引入了新的操作符 rangeUntil ( ..< ) 。您可以在自己的类中进行重写以实现自定义实现。

import java.text.SimpleDateFormat
import java.util.*

operator fun Date.rangeUntil(date: Date): Iterable<Date>  {
    val list = arrayListOf<Date>()
    val c = Calendar.getInstance()
    c.time = this
    while (date > c.time) {
        list.add(c.time)
        c.add(Calendar.DAY_OF_YEAR, 1)
    }

    return list
}

fun main() {
    val date1 = Date(1687372200000)
    val date2 = Date(1689140005851)

    val formatter = SimpleDateFormat("d MMM, yyyy")
    for (date in date1 ..< date2) {
        println(formatter.format(date))
    }
}

4. Kotlin / Native

Kotlin 1.9.0 引入了一个新的预览功能,即自定义内存分配器,以提高 Kotlin / Native 内存管理器的性能。当前的分配器对于垃圾回收来说并不高效。更多内容请查看下面的链接。

https://kotlinlang.org/docs/whatsnew19.html#preview-of-custom-memory-allocator

要启用此预览的自定义内存分配器功能,请在您的多平台项目的 build.gradle 中添加以下内容。

kotlin {
  macosX64("native") {
    binaries.executable()

    compilation.configureEach {
      compilationOptions.configure 
        freeCompilerArgs.add(-Xallocator=custom)
      }
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pytest-allure 生成测试报告

目录 前言&#xff1a; pytest 中 yield 和 return 的区别和相同点 共同点 区别 usefixtures 与传 fixture 区别 Pytest 常用的插件 一键安装多个模块 前言&#xff1a; 在软件测试中&#xff0c;生成清晰、易读的测试报告是非常重要的。pytest-allure是一个流行的测试…

centos逻辑分区磁盘扩展

最近碰到服务器磁盘空间不足&#xff0c;需要扩展逻辑分区的需求&#xff0c;特地做下小笔记&#xff0c;方便后续自己回忆。下图是磁盘的相关概念示意图&#xff1a; 1、查看磁盘空间 [rootlocalhost ~]# df -h #查看磁盘空间&#xff0c;根分区的大小是18G&#xff0c;已经用…

微服务——Eureka和Nacos

目录 提供者和消费者 ​编辑 Eureka注册中心——远程调用的问题 Eureka注册中心——原理分析 Eureka注册中心——搭建eureka服务 步骤: Eureka注册中心——服务注册 Eureka注册中心——服务发现 总结 Ribbon负载均衡——原理 流程: Ribbon负载均衡——策略 Ribbon负载均衡—…

ChatGPT:人工智能语言模型的革命性进步

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

idea中回退远程push过的提交(详细图文操作)

目录 git基本知识回顾git中本地文件保存的3个地方工作区暂存区本地仓库代码提交到远程仓库的流转 reset命令的3个参数softmixedhard 具体操作模拟两次提交远程分支回退到第一次提交第一次reset hard第二次reset soft/mixed git基本知识回顾 git中本地文件保存的3个地方 工作区…

CSS :nth-child

CSS :nth-child :nth-child 伪类根据元素在同级元素中的位置来匹配元素. CSS :nth-child 语法 值是关键词 odd/evenAnB最新的 [of S] 语法权重 浏览器兼容性 很简单的例子, 来直觉上理解这个伪类的意思 <ul><li class"me">Apple</li><li>B…

陪诊小程序搭建|陪诊接单平台开发|医疗陪诊小程序

陪诊小程序是一种提供陪同就诊服务的在线平台&#xff0c;具有广阔的发展前景。下面是对陪诊小程序发展前景的介绍&#xff1a;   随着社会的发展和人们生活水平的提高&#xff0c;人们对医疗服务的需求也越来越高。然而&#xff0c;由于工作繁忙、时间紧张等原因&#xff0c…

【C++】通过栈和队列学会使用适配器和优先队列学会仿函数的使用

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…

网络超时导致namenode被kill的定位

交换机升级导致部分网络通信超时, 集群的namenode主从切换后,主namenode进程被杀死。 网络问题导致namenode与zk间的连接超时触发了hadoop集群的防脑裂机制而主动kill掉了超时的namenode进程。 日志分析发现zk和namenode之间的网络连接超时: 超时触发了namenode切换,并将超时…

flex布局进阶

推荐看一下阮一峰老师的flex布局博客【Flex 布局教程&#xff1a;语法篇】(https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html#)&#xff0c;讲的非常清晰。 一、多行布局大小相同的子盒子技巧 使用弹性布局实现多行均匀布局时&#xff0c;如若子盒子数量不能被每行…

AI Chat 设计模式:9. 命令模式

本文是该系列的第九篇&#xff0c;采用问答式的方式展开&#xff0c;问题由我提出&#xff0c;答案由 Chat AI 作出&#xff0c;灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 介绍下命令模式A.1Q.2 详细说说命令模式适用于啥场景呢A.2Q.3 举一个命令模式的例子&a…

网络知识点之-BGP协议

边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

SQL 连接(JOIN)

SQL 连接&#xff08;JOIN&#xff09;是一种用于将两个或多个表中的数据相互匹配的操作&#xff0c;从而形成一个新的数据集合。JOIN 操作常用于查询和分析数据库中的数据&#xff0c;可以根据不同的连接方式返回不同的结果集。 SQL join 用于把来自两个或多个表的行结合起来…

明解STM32—GPIO理论基础知识篇之寄存器原理​

一、前言 在之前的STM32的GPIO理论基础知识中&#xff0c;分别对基本结构和工作模式进行了详细的介绍。GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析&#xff1b;GPIO工作模式中主要介绍GPIO应用在不同的使用场景下&#xff0c;GPIO端口的静态特征配置和动态的…

FinClip 小程序桌面端商店上线啦

随着技术的不断进步和用户需求的增长&#xff0c;移动应用程序市场日益蓬勃发展。 然而&#xff0c;开发者们面临着一个严峻的挑战&#xff1a;“如何在不同的操作系统上开发和发布应用程序&#xff0c;以满足不同用户群体的需求&#xff1f;”在这方面&#xff0c;使用小程序…

【C++】深层次了解继承,从基础概念到复杂菱形继承问题(文章结尾有菱形继承常见面试题)

1.继承的概念及定义 继承的概念 继承是面向对象设计使代码可以复用的重要手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生的类&#xff0c;称为派生类。 继承的概念并不是固定的&#xff0c;只要能够通过自己的语言…

浅聊webpack的工作原理

参考文献: https://webpack.docschina.org/concepts/ 简述一下 WebPack 是一个模块打包工具&#xff0c;可以使用 WebPack 管理模块。在 webpack 看来&#xff0c;项目里所有资源皆模块&#xff0c;分析模块间的依赖关系&#xff0c;最终编绎输出模块为 HTML、JavaScript、CS…

C++OpenCV(5):图像模糊操作(四种滤波方法)

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像模糊操作均值滤波高斯滤波中值滤波双边滤波 图像模糊操作 关于图片的噪声&#xff1a;指的是图片中存在的不必要或者多余的干扰数…

MySQL-多表查询-案例1

案例 根据需求完成多表查询的SQL语句的编写将资料汇中准备好的数据的SQL脚本导入到数据库中准备数据中各表的关系如下 具体代码 -- 分类表 create table category(id int unsigned primary key auto_increment comment 主键ID,name varchar(20) not null unique comment 分类名…

ARM练习

通过汇编语言完成LED1-3循环点亮练习 .text .global _start _start: /**********LED1点灯**************/ /*初始化RCC*/ RCC_INIT:LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<4)ORR R2,R1,#(0x1<<5)STR R1,[R0]STR R2,[R0]LED1_INIT:设置输出模式LDR R0,0X5…