当前位置: 首页 > news >正文

Kotlin:1.8.0 的新特性

一、概述

Kotlin 1.8.0版本英语官方文档

Kotlin 1.8.0 中文官方文档

The Kotlin 1.8.0 release is out and here are some of its biggest highlights:
Kotlin 1.8.0发布了,下面是它的一些亮点:

  • JVM 平台新增实验性函数:递归复制或删除目录内容
  • 改进了 kotlin-reflect 性能
  • 新增 -Xdebug 编译器选项以提供更好的调试体验
  • kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并进了 kotlin-stdlib
  • 改进了 Objective-C/Swift 互操作性
  • 与 Gradle 7.3 的兼容性

主要演示的其中三个特性,测试结果图如下
在这里插入图片描述

二、kotlin-stdlib-jdk7 与 kotlin-stdlib-jdk8 合并进了 kotlin-stdlib

标准库
Kotlin 1.8.0:
稳定了一些函数——Java 与 Kotlin 之间的 TimeUnit 转换、 cbrt()、 Java Optional 扩展函数。
提供可比较且可减去的 TimeMark 预览版。
包含 java.nio.file.path 的实验性扩展函数。
附赠改进了 kotlin-reflect 性能。

2.1 cbrt()函数

cbrt()函数允许您计算双精度或浮点数的实数立方根,它现在是稳定的。

fun testcbrt(){println("------ cbrt()函数计算双精度或浮点数的实数立方根 结果 ------")val num = 27val negNum = -numprintln("The cube root of ${num.toDouble()} is:"+ cbrt(num.toDouble()))println("The cube root of ${negNum.toDouble()} is:"+ cbrt(negNum.toDouble()))
}

运行结果
在这里插入图片描述

2.2 Java 与 Kotlin 之间的 TimeUnit 转换

kotlin中的toTimeUnit()和toDurationUnit()函数。时间现在稳定了。这些功能在Kotlin 1.6.0中作为实验版本引入,提高了Kotlin与Java之间的互操作性。
现在您可以轻松地在Java Java .util.concurrent. timeunit和Kotlin Kotlin .time. durationunit之间进行转换。这些函数仅在JVM上受支持。

// For use from Java
fun wait(timeout: Long, unit: TimeUnit) {val duration: Duration = timeout.toDuration(unit.toDurationUnit())println("java timeout = $timeout $unit 使用 kotlin 转换后 duration = $duration")
}fun main(){testcbrt()println("------ Java 与 Kotlin 之间的 TimeUnit 转换 ------")wait(1, TimeUnit.HOURS)wait(1, TimeUnit.MINUTES)wait(60, TimeUnit.MINUTES)wait(3, TimeUnit.SECONDS)wait(60, TimeUnit.SECONDS)wait(1000, TimeUnit.MILLISECONDS)wait(1000, TimeUnit.MICROSECONDS)}

运行结果
在这里插入图片描述

2.3 可比较可减去的 TimeMark

在Kotlin 1.8.0之前,如果您想计算多个TimeMark与现在之间的时间差,那么一次只能对一个TimeMark调用elapsedNow()。 这使得比较结果变得困难,因为两个elapsedNow()函数调用不能完全同时执行。

为了解决这个问题,在Kotlin 1.8.0中,您可以从同一时间源中减去和比较timemark。 现在可以创建一个新的TimeMark实例来表示Now,并从中减去其他TimeMark。这样,从这些计算中收集的结果就可以保证彼此是相对的。

fun testTimeMark(){println("------ 可比较可减去的 TimeMark ------")val timeSource = TimeSource.Monotonicvar mark1 = timeSource.markNow()Thread.sleep(500)val mark2 = timeSource.markNow()repeat(4) { n ->val elapsed1 = mark1.elapsedNow()val elapsed2 = mark2.elapsedNow()// Difference between elapsed1 and elapsed2 can vary depending// on how much time passes between the two elapsedNow() callsprintln("Measurement 1.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")}println()// Since 1.8.0repeat(4) { n ->val mark3 = timeSource.markNow()val elapsed1 = mark3 - mark1val elapsed2 = mark3 - mark2// Now the elapsed times are calculated relative to mark3,// which is a fixed valueprintln("Measurement 2.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")}// It's also possible to compare time marks with each other// This is true, as mark2 was captured later than mark1println("mark2 > mark1 : ${mark2 > mark1}")
}

运行结果
在这里插入图片描述

三、kt_180.kt文件代码

package com.example.test.ktversionimport java.util.concurrent.TimeUnit
import kotlin.math.cbrt
import kotlin.time.Duration
import kotlin.time.TimeSource
import kotlin.time.toDuration
import kotlin.time.toDurationUnit/*https://book.kotlincn.net/text/whatsnew18.html标准库Kotlin 1.8.0:稳定了一些函数——Java 与 Kotlin 之间的 TimeUnit 转换、 cbrt()、 Java Optional 扩展函数。提供可比较且可减去的 TimeMark 预览版。包含 java.nio.file.path 的实验性扩展函数。附赠改进了 kotlin-reflect 性能。*/
/*** cbrt()函数允许您计算双精度或浮点数的实数立方根,它现在是稳定的。*/
fun testcbrt(){println("------ cbrt()函数计算双精度或浮点数的实数立方根 结果 ------")val num = 27val negNum = -numprintln("The cube root of ${num.toDouble()} is:"+ cbrt(num.toDouble()))println("The cube root of ${negNum.toDouble()} is:"+ cbrt(negNum.toDouble()))
}/*Java 与 Kotlin 之间的 TimeUnit 转换kotlin中的toTimeUnit()和toDurationUnit()函数。时间现在稳定了。这些功能在Kotlin 1.6.0中作为实验版本引入,提高了Kotlin与Java之间的互操作性。现在您可以轻松地在Java Java .util.concurrent. timeunit和Kotlin Kotlin .time. durationunit之间进行转换。这些函数仅在JVM上受支持。*/
// For use from Java
fun wait(timeout: Long, unit: TimeUnit) {val duration: Duration = timeout.toDuration(unit.toDurationUnit())println("java timeout = $timeout $unit 使用 kotlin 转换后 duration = $duration")
}/*可比较可减去的 TimeMark在Kotlin 1.8.0之前,如果您想计算多个TimeMark与现在之间的时间差,那么一次只能对一个TimeMark调用elapsedNow()。这使得比较结果变得困难,因为两个elapsedNow()函数调用不能完全同时执行。为了解决这个问题,在Kotlin 1.8.0中,您可以从同一时间源中减去和比较timemark。现在可以创建一个新的TimeMark实例来表示Now,并从中减去其他TimeMark。这样,从这些计算中收集的结果就可以保证彼此是相对的。*/
fun testTimeMark(){println("------ 可比较可减去的 TimeMark ------")val timeSource = TimeSource.Monotonicvar mark1 = timeSource.markNow()Thread.sleep(500)val mark2 = timeSource.markNow()repeat(4) { n ->val elapsed1 = mark1.elapsedNow()val elapsed2 = mark2.elapsedNow()// Difference between elapsed1 and elapsed2 can vary depending// on how much time passes between the two elapsedNow() callsprintln("Measurement 1.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")}println()// Since 1.8.0repeat(4) { n ->val mark3 = timeSource.markNow()val elapsed1 = mark3 - mark1val elapsed2 = mark3 - mark2// Now the elapsed times are calculated relative to mark3,// which is a fixed valueprintln("Measurement 2.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")}// It's also possible to compare time marks with each other// This is true, as mark2 was captured later than mark1println("mark2 > mark1 : ${mark2 > mark1}")
}fun main(){testcbrt()println("------ Java 与 Kotlin 之间的 TimeUnit 转换 ------")wait(1, TimeUnit.HOURS)wait(1, TimeUnit.MINUTES)wait(60, TimeUnit.MINUTES)wait(3, TimeUnit.SECONDS)wait(60, TimeUnit.SECONDS)wait(1000, TimeUnit.MILLISECONDS)wait(1000, TimeUnit.MICROSECONDS)testTimeMark()
}
http://www.lryc.cn/news/451722.html

相关文章:

  • 深度学习之开发环境(CUDA、Conda、Pytorch)准备(4)
  • 10月2日笔记(内网资源探测篇)
  • SpringCloud-基于Docker和Docker-Compose的项目部署
  • Linux下的基本指令/命令(一)
  • 从零开始Ubuntu24.04上Docker构建自动化部署(四)Docker安装gitlab
  • No module named ‘_ssl‘
  • Linux —— Socket编程(三)
  • 5G N2 N3 N6 NB口
  • 【数据结构】堆(Heap)详解
  • 《Linux从小白到高手》理论篇(四):Linux用户和组相关的命令
  • OpenGL ES 之EGL(6)
  • kotlin 委托
  • Stream流的中间方法
  • 【车载开发系列】ParaSoft单元测试环境配置(四)
  • IDEA 设置自动定位文件
  • Nature Machine Intelligence 基于强化学习的扑翼无人机机翼应变飞行控制
  • [Web安全 网络安全]-XXE 外部实体注入攻击XML
  • 8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
  • 测试面试题:pytest断言时,数据是符点类型,如何断言?
  • Python与MongoDB交互
  • 安卓AI虚拟女友项目开发的Android开发环境搭建
  • 基于SpringBoot+Vue+MySQL的智能垃圾分类系统
  • 你的个人文件管理助手:AI驱动的本地文件整理工具
  • 【PyTorch】环境配置
  • 枫叶MTS格式转换器- 强大、操作简单的MTS、M2TS视频转换工具供大家学习研究参考
  • Vscode把全部‘def‘都收起来的快捷键
  • Web和UE5像素流送、通信教程
  • 【YOLO目标检测电梯间电动车与人数据集】共4321张、已标注txt格式、有训练好的yolov5的模型
  • 【网络安全】公钥基础设施
  • 云原生(四十一)| 阿里云ECS服务器介绍