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

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 = 27
    val negNum = -num
    println("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.Monotonic
    var 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() calls
        println("Measurement 1.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")
    }

    println()

    // Since 1.8.0
    repeat(4) { n ->
        val mark3 = timeSource.markNow()
        val elapsed1 = mark3 - mark1
        val elapsed2 = mark3 - mark2

        // Now the elapsed times are calculated relative to mark3,
        // which is a fixed value
        println("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 mark1
    println("mark2 > mark1 : ${mark2 > mark1}")
}

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

三、kt_180.kt文件代码

package com.example.test.ktversion

import 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 = 27
    val negNum = -num
    println("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.Monotonic
    var 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() calls
        println("Measurement 1.${n + 1}: elapsed1=$elapsed1, " + "elapsed2=$elapsed2, diff=${elapsed1 - elapsed2}")
    }

    println()

    // Since 1.8.0
    repeat(4) { n ->
        val mark3 = timeSource.markNow()
        val elapsed1 = mark3 - mark1
        val elapsed2 = mark3 - mark2

        // Now the elapsed times are calculated relative to mark3,
        // which is a fixed value
        println("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 mark1
    println("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.kler.cn/a/329252.html

相关文章:

  • 移门缓冲支架的工作原理
  • 闫氏DP分析法应用
  • 39.十进制数转化为二进制数 C语言
  • 【Redis】使用redis实现登录校验功能
  • sqli—labs靶场 5-8关 (每日4关练习)持续更新!!!
  • MySQL —— MySQL索引介绍、索引数据结构、聚集索引和辅助索引、索引覆盖
  • 开源23.6k star 一款即用型 OCR,支持 80+ 种语言和所有流行的书写脚本,只需几行代码即可实现文字识别功能。
  • 网易云多久更新一次ip属地
  • Java研学-BootStrapTable插件
  • $_POST = file_get_contents(“php://input“);是什么意思
  • C语言指针详解与应用(不断更新)
  • MongoDB 入门及实践
  • 【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU
  • MongoDB 聚合管道
  • Springboot3 + MyBatis-Plus + MySql + Vue + ProTable + TS 实现后台管理商品分类(最新教程附源码)
  • Webpack和GuIp打包原理以及不同
  • IDM下载器如何下载网盘文件 IDM下载器支持哪些网盘
  • 【数据库】Java 集成mongodb— MongoTemplate 详解
  • OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用
  • YOLO11改进|卷积篇|引入可变核卷积AKConv
  • 程序计数器(学习笔记)
  • Docker 进入容器运行命令的详细指南
  • “图像识别技术:重塑生活与工作的未来”
  • Linux:编译,调试和Makefile
  • Spring MVC系统学习(一)——初识Spring MVC框架
  • AIGAME平台的由来与未来展望 —— 蒙特加密基金推动区块链与AI融合创新