Kotlin 新版本 1.9.0重要更新预览

释放 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)
      }
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

九、数据结构——顺序队列中的循环队列

目录 一、循环队列的定义 二、循环队列的实现 三、循环队列的基本操作 ①初始化 ②判空 ③判满 ④入队 ⑤出队 ⑥获取长度 ⑦打印 四、循环队列的应用 五、全部代码 数据结构中的循环队列 在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的线性数据结…

pytest+allure运行出现乱码的解决方法

pytestallure运行出现乱码的解决方法 报错截图&#xff1a; 这里的截图摘自 悟翠人生 小伙伴的https://blog.csdn.net/weixin_45435918/article/details/107601721一文。 这是因为没有安装allure运行环境或者没有配置allure的环境变量导致&#xff0c;解决方案&#xff1a; 1…

Vue移动端项目--瑞幸咖啡重构优化

来了客官&#xff0c;好久不见&#xff01; 从年初开始&#xff0c;就有个想法&#xff0c;想着把之前做过的项目重新整理一下。毕竟今时不同往日&#xff0c;从现在的角度去看曾经做过的项目&#xff0c;倒是觉得有很多稚嫩的地方。毕竟无论做什么都是熟能生巧&#xff0c;由浅…

深度学习推理和训练

优化和泛化 深度学习的根本问题是优化和泛化之间的对立。 • 优化&#xff08;optimization&#xff09;是指调节模型以在 训练数据 上得到最佳性能&#xff08;即机器学习中的学习&#xff09;。 • 泛化&#xff08;generalization&#xff09;是指训练好的模型在 前所未…

2023JAVA 架构师面试 130 题含答案:JVM+spring+ 分布式 + 并发编程》...

此文包含 Java 面试的各个方面&#xff0c;史上最全&#xff0c;苦心整理最全 Java 面试题目整理包括基JVM算法数据库优化算法数据结构分布式并发编程缓存等&#xff0c;使用层面广&#xff0c;知识量大&#xff0c;涉及你的知识盲点。要想在面试者中出类拔萃就要比人付出更多的…

nginx怎么做负载均衡

Nginx怎么做负载均衡 Nginx 是一个高性能的开源反向代理服务器&#xff0c;可以用于实现负载均衡。负载均衡指的是将用户请求平均分配给多个服务器&#xff0c;以提高整体系统性能和可靠性。下面是一个详细介绍如何使用 Nginx 实现负载均衡的步骤&#xff1a; 步骤 1&#xf…

【Nodejs】Node.js简介

1.前言 Node 的重要性已经不言而喻&#xff0c;很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外&#xff0c;目前最为流行的 Web 开发模式是前后端分离的形式&#xff0c;即前端开发者与后端开发者在自己喜…

提升Web3安全性和用户体验:元事务和加密技术的应用

在Web3中&#xff0c;去中心化应用程序&#xff08;DApps&#xff09;是一种基于区块链技术的应用程序&#xff0c;它们通过智能合约实现透明、安全、去中心化的业务逻辑。然而&#xff0c;DApps的使用门槛比传统的中心化应用程序更高&#xff0c;需要用户具备一定的技术知识&a…

工厂能耗管理系统解决方案

1、概述 随着碳达峰、碳中和成为政府工作主要任务&#xff0c;工厂作为能耗密集&#xff0c;用能情况较为复杂的大型建筑&#xff0c;有效的降低能源消耗&#xff0c;减少能源成本&#xff0c;避免用能过程中的“跑冒滴漏”现象&#xff0c;实施能效综合考评是个非常必要的管理…

C语言学习笔记 VScode设置C环境-06

目录 一、下载vscode软件 二、安装minGW软件 三、VS Code安装C/C插件 3.1 搜索并安装C/C插件 3.2 配置C/C环境 总结 一、下载vscode软件 在官网上下载最新的版本 Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 二、安装minGW…

添加USB转串口设备驱动-迅为i.MX8M开发板

对于通过 USB 接口访问的模块&#xff0c;在 Linux 内核中集成 USB 驱动程序。我们需要配置内核选中支持 GSM 和 CDMA 模块的 USB 转串口驱动 > Device Drivers -> USB support (USB_SUPPORT [y]) -> USB Serial Converter support (USB_SERIAL [y]) -> USB driver…

2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A&#xff1a;智能手机用户监测数据分析 问题二分类与回归问题Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A&#xff1a;智能手机用户监测数据分析 问题一Python代码分析 【2023 年第二届…

day42-servlet下拉查询/单例模式

0目录 1.Servlet实现下拉查询&#xff08;两表&#xff09; 2.单例模式 1.实战 1.1 创建工程&#xff0c;准备环境... 1.2 接口 1.3 重写方法 1.4 servlet 1.5 list.jsp list.jsp详解 2.单例模式 2.1 饿汉模式&#xff1a;在程序加载时直接创建对象&#…

基于SpringBoot+Vue的摄影跟拍预定管理系统设计与实现(源码+lw+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

fastadmin 项目gitee管理

gitee创建一个仓库使用sourcetree等工具拉取代码使用phpstorm远程同步代码到本地设置忽略代码文件 注意&#xff1a;如果是直接把远程代码同步到本地&#xff0c;默认是你在 .gitignore中设置是无效的&#xff0c;代码一样会提交&#xff0c;需要先使用上面的截图去掉缓存&…

jmeter随记3:常用jmeter功能(附带场景)

常用jmeter功能&#xff08;附带场景&#xff09; 一、jmeter其他特性1、请求的接口有多个 且 域名相同2、 jmeter支持统一管理参数的设置a、创建HTTP Header Managerb、用户定义参数c、csv数据文件设置 3、接口a的返回值作为 接口b的入参a、 json提取器b、 正则表达式 4、if c…

小程序中vant-weapp时间选择使用方法

一、选择单个时间点&#xff1a; wxml&#xff1a; <van-celltitle"选择预约时间"value"{{ time }}"bind:click"onDisplay"/><van-calendarshow"{{ show }}"bind:close"onClose"bind:confirm"onConfirm"…

嵌入式Linux驱动开发——常见框架梳理

前言 本文主要介绍了Linux驱动开发中一些常用的驱动框架&#xff0c;platform、input、iic、spi等&#xff0c;硬件平台使用的是正点原子的imx6ull开发板。 一&#xff1a;Pinctrl子系统、Gpio子系统 不管什么框架最后都是要追溯到配置IO的电气属性和复用功能 如果要使用外部…

seatunnel hive source 未设置分隔符导致多个字段合并成一个的问题定位解决

seatunnel hive source 未设置分隔符导致多个字段没有切分全保存在一个字段中了,翻看源码发现分隔符是是通过delimiter设置的,只要设置这个delimiter","就可以了。 设置这个属性 delimiter“,” 他的默认值是\u0001,如果没有设置delimiter属性则会根据文件类型判断…