一、概述
The Kotlin 1.9.0 release is out and the K2 compiler for the JVM is now in Beta. Additionally, here are some of the main highlights:
Kotlin 1.9.0版本已经发布,用于JVM的K2编译器现在处于Beta阶段。此外,以下是一些主要亮点:
- 新版 Kotlin K2 编译器更新
- 稳定版枚举类的 values 函数替代
- 稳定版用于前闭后开区间的 ...< 操作符
- 新增按名称获取正则表达式捕获组的公共函数
- 新增用于创建父目录路径的实用程序
- Kotlin 多平台 Gradle 配置缓存预览版
- Kotlin 多平台 Android 目标平台支持的变更
- Kotlin/Native 自定义内存分配器预览版
- Kotlin/Native 的库链接
- Kotlin/Wasm 尺寸相关的优化
主要演示的其中四个特性,测试结果图如下
二 、稳定版枚举类的 使用 entries 替代 values 函数
bash
enum class Color(val colorName: String, var rgb: String) {
RED("红色", "#FF0000"),
ORANGE("橘色", "#FF7F00"),
YELLOW("Yellow", "#FFFF00")
}
// https://book.kotlincn.net/text/whatsnew1820.html
// entries 属性是在 Kotlin 1.8.20 中作为实验性功能引入的,在 Kotlin 1.9.0 中已经稳定
// 稳定版枚举类的 使用 entries 替代 values 函数
fun findColoBy(rbg: String?): Color? = Color.entries.find { it.rgb == rbg }
enum class RGB { RED, GREEN, BLUE }
/**
* 稳定版枚举类的 使用 entries 替代 values 函数
*/
fun testEnum() {
// for (color in RGB.values()) println(color.toString())
for (color in RGB.entries) println(color.toString())
//RED
//GREEN
//BLUE
println("----------------------------------- end")
}
三、稳定版用于前闭后开区间的 ...< 操作符
bash
fun testOpenIntervalWithFrontClosed() {
// for (number in 2 until 6) {
// println("number = $number")
// }
//前闭后开区间的 ..< 操作符
for (number in 2..<6) {
println("number = $number")
//number = 2
//number = 3
//number = 4
//number = 5
}
println("-------------------- 稳定版用于前闭后开区间的 ...< 操作符 ------- end")
}
四、新增按名称获取正则表达式捕获组的公共函数
bash
/**
* 新增按名称获取正则表达式捕获组的公共函数
*/
fun testRegex() {
val regex =
"""\b(?<city>[A-Za-z\s]+),\s(?<state>[A-Z]{2}):\s(?<areaCode>[0-9]{3})\b""".toRegex()
val input = "Coordinates: Austin, TX: 123"
// 坐标:奥斯汀,德克萨斯州:123
val match = regex.find(input)!!
println(match.groups["city"]?.value)
// Austin
println(match.groups["state"]?.value)
// TX
println(match.groups["areaCode"]?.value)
// 123
println("-------------------- 新增按名称获取正则表达式捕获组的公共函数 ------- end")
}
五、数据类相称的数据对象
bash
//数据类相称的数据对象
sealed interface ReadResult
data class Number(val number: Int) : ReadResult
data class Text(val text: String) : ReadResult
data object EndOfFile : ReadResult
/**
* 数据类相称的数据对象
*/
fun testDataObject(){
println(Number(7))
println(EndOfFile)
//Number(number=7)
//EndOfFile
println("-------------------- 数据类相称的数据对象 ------ end")
}
六、kt_190文件完整代码
bash
package com.example.test.ktversion
/*
https://book.kotlincn.net/text/whatsnew19.html
*/
enum class Color(val colorName: String, var rgb: String) {
RED("红色", "#FF0000"),
ORANGE("橘色", "#FF7F00"),
YELLOW("Yellow", "#FFFF00")
}
// https://book.kotlincn.net/text/whatsnew1820.html
// entries 属性是在 Kotlin 1.8.20 中作为实验性功能引入的,在 Kotlin 1.9.0 中已经稳定
// 稳定版枚举类的 使用 entries 替代 values 函数
fun findColoBy(rbg: String?): Color? = Color.entries.find { it.rgb == rbg }
enum class RGB { RED, GREEN, BLUE }
//数据类相称的数据对象
sealed interface ReadResult
data class Number(val number: Int) : ReadResult
data class Text(val text: String) : ReadResult
data object EndOfFile : ReadResult
/**
* 稳定版枚举类的 使用 entries 替代 values 函数
*/
fun testEnum() {
// for (color in RGB.values()) println(color.toString())
for (color in RGB.entries) println(color.toString())
//RED
//GREEN
//BLUE
println("------------------- 稳定版枚举类的 使用 entries 替代 values 函数 ----- end")
}
/**
* 稳定版用于前闭后开区间的 ...< 操作符
*/
fun testOpenIntervalWithFrontClosed() {
// for (number in 2 until 6) {
// println("number = $number")
// }
//前闭后开区间的 ..< 操作符
for (number in 2..<6) {
println("number = $number")
//number = 2
//number = 3
//number = 4
//number = 5
}
println("-------------------- 稳定版用于前闭后开区间的 ...< 操作符 ------- end")
}
/**
* 新增按名称获取正则表达式捕获组的公共函数
*/
fun testRegex() {
val regex =
"""\b(?<city>[A-Za-z\s]+),\s(?<state>[A-Z]{2}):\s(?<areaCode>[0-9]{3})\b""".toRegex()
val input = "Coordinates: Austin, TX: 123"
// 坐标:奥斯汀,德克萨斯州:123
val match = regex.find(input)!!
println(match.groups["city"]?.value)
// Austin
println(match.groups["state"]?.value)
// TX
println(match.groups["areaCode"]?.value)
// 123
println("-------------------- 新增按名称获取正则表达式捕获组的公共函数 ------- end")
}
/**
* 数据类相称的数据对象
*/
fun testDataObject(){
println(Number(7))
println(EndOfFile)
//Number(number=7)
//EndOfFile
println("-------------------- 数据类相称的数据对象 ------ end")
}
fun main() {
testEnum()
testOpenIntervalWithFrontClosed()
testRegex()
testDataObject()
}