探索Kotlin 1.8.20新特性

news2024/11/24 20:06:50

探索Kotlin 1.8.20新特性

kotlin1.8.20
Kotlin 1.8.20已经发布,我们将探索一些新功能和改进。

  • 我们将仅涵盖新的语言功能标准库更新
  • 请参考参考资料部分以了解此版本的完整详情。

语言更新

Enum 类entries函数

为什么需要这个函数?
values() - 返回数组,大多数情况下我们会将其转换为列表进行操作。与列表相比,数组的性能较低。
enum

enum class Language(val extension: String) {
    Kotlin(".KT"),
    Java(".java"),
    Dart(".dart")
}

// values - Returns Array
val languageValues:Array<Language> = Language.values()


// New function entries - Returns List
val languageEntries:List<Language> = Language.entries

Data objects

  • 为了提高可读性,我们引入了这个新特性。
  • 它具有整洁清晰的toString()表示形式。
object EmployeeObject

data object EmployeeDataObject

// Output

println(EmployeeObject)

println(EmployeeDataObject) 

// EmployeeObject@50040f0c

// EmployeeDataObject

在内联类中次级构造函数可有函数体

从1.8.20版本开始,我们可以在内联类中使用带有函数体的次构造函数。

@JvmInline
value class Employee(private val fullName: String) {
    // Allowed since Kotlin 1.4.30:
    init {
        check(fullName.isNotBlank()) {
            "Full name shouldn't be empty"
        }
    }

    // Preview available since Kotlin 1.8.20:
    constructor(firstName: String, middleName:String, lastName: String) : this("$firstName $middleName $lastName") {
        check(lastName.isNotBlank()) {
            "Last name shouldn't be empty"
        }
    }
}

标准库更新

新增了Autocloseable接口

为了关闭资源,常见的标准库中添加了AutoCloseable接口。
还包括了扩展函数use(),它在所选资源上执行给定的块函数,然后无论是否抛出异常,都会正确关闭它。

Base64编码和解码

现在在Kotlin中我们有了Base64的支持,所以不再需要Java了

有三种类型可用
Base64.DefaultBase64.UrlSafeBase64.Mime

@OptIn(ExperimentalEncodingApi::class)
fun base64Experimental() {
    // Base64.Default
    val nameBytes = "Nav".map { it.code.toByte() }.toByteArray()
    val encodedValue = Base64.Default.encode(nameBytes)
    // Encode value: TmF2
    println("Encoded: $encodedValue") 
    // Decoded value: Nav
    println("Decoded: ${String(Base64.Default.decode(encodedValue))}")
    
    // Base64.UrlSafe
    val googleIOUrlBytes = "google.io".map { it.code.toByte() }.toByteArray()
    // Encode value: Z29vZ2xlLmlv
    val encodedURLSafe = Base64.UrlSafe.encode(googleIOUrlBytes)
    println("Encoded UrlSafe: $encodedURLSafe")
    // Decoded value: google.io
    println("Decoded UrlSafe: ${String(Base64.UrlSafe.decode(encodedURLSafe))}")
}

对Kotlin/Native的@Volatile注解的支持

在1.8.20之前,@Volatile注解只在公共标准库中可用,并且在JVM中有效。

class Developer {
    @Volatile
    private var isAndroidDev: Boolean = false

    fun isAndroidDevloper(): Boolean = isAndroidDev

    fun setAndroidDev(isAndroidDev: Boolean) {
        this.isAndroidDev = isAndroidDev
    }

}

Kotlin/JVM

  • Java合成属性引用的预览功能
public class Developer {
    private String name;
    private String coreLanguage;

    public Developer(String name, String coreLanguage) {
        this.name = name;
        this.coreLanguage = coreLanguage;
    }

    public String getName() {
        return name;
    }

    public String getCoreLanguage() {
        return coreLanguage;
    }
}
  • 使用引用调用属性
val developer = Developer("Nav", "Kotlin")

    // references to Java synthetic properties
    print("Developer name is ${developer::name}")

参考

[kotlin1.8.20新特性] https://kotlinlang.org/docs/whatsnew1820.html

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

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

相关文章

电商数仓建模案例

目录 一、数据仓库分层规划二、数据仓库构建流程2.1 数据调研2.2 明确数据域2.3 构建业务总线矩阵2.4 明确统计指标2.4 维度模型设计2.5 汇总模型设计 三、数仓建模之ODS层3.1 日志表3.1.1 日志表表结构 3.2 业务表3.2.1 业务表表结构 四、数仓开发之DIM层4.1 商品维度表4.2 优…

The Sandbox 与 Biconomy 合作,达成交易里程碑

双方将继续合作利用 Polygon Labs 来降低用户的成本和 The Sandbox 的碳足迹。 我们团队继续推动更好的整体项目生态系统的可持续性&#xff0c;同时沿途的里程碑向我们展示这些进展产生的影响。我们很高兴地宣布&#xff0c;自从在 Biconomy.io 的帮助下首次在 Polygon 上部署…

网络地址转换:DNAT和SNAT有啥区别?分别用于什么场景?

什么是网络地址转换&#xff08;NAT&#xff09;&#xff1f; 网络地址转换&#xff08;Network Address Translation&#xff0c;简称NAT&#xff09;是一种常见的网络技术&#xff0c;用于在私有网络&#xff08;如家庭或办公室网络&#xff09;与公共网络&#xff08;如互联…

POI Excel 基础(一)

POI 5.2.3 官网 github POI-HSSF and POI-XSSF/SXSSF 用于访问Microsoft Excel格式文件的Java API HSSF&#xff1a;是Horrible SpreadSheet Format的缩写&#xff0c;也即“可怕的电子表格格式” 是操作Excel97-2003版本&#xff0c;扩展名为.xls。XSSF&#xff1a; 是操作…

【JavaSE】Java基础语法(三)

文章目录 1. &#x1f37c;流程控制语句1.1 流程控制语句分类1.2 分支结构之if语句1.2.1 if语句格式3案例 2. &#x1f37c;switch语句2.1 分支语句switch语句2.2 switch案例-减肥计划2.3 switch语句case穿透 3. &#x1f37c;for 循环3.1 循环语句-for循环3.2 for循环案例-求1…

项目集管理—项目集相关方参与

项目集相关方参与是识别和分析相关方需求、管理期望和沟通&#xff0c;以促进相关方支持的绩效领域。 本章内容包括&#xff1a; 1 项目集相关方识别2 项目集相关方分析3 项目集相关方参与规划4 项目集相关方参与5 项目集相关方沟通 相关方是指能够影响项目、项目集或项目组合…

Java 实现实时监听MySQL数据库变更MySQLBinListener

目录 1、导出需要的类和接口 2、 定义 MySQLBinlogListener类 3、私有方法&#xff0c;启动重连定时器 4、完整代码 编写一个MySQL数据库实时变更的监听器。 为什么要编写这个一个监听器&#xff1a;为了实时监测和响应MySQL数据库中的变更事件 实时数据同步&#xff1a;通…

运营-12.转化

用户注册、登录、浏览、发布、购买等行为都可以视为转化&#xff1b;而对于电商产品而言&#xff0c;狭义的转化即为获取 收入&#xff0c;就是要用户买单、消费&#xff0c;把免费用户转化为付费用户&#xff1b; 转化的重要性 1.转化意味着用户有投入&#xff0c;投入即沉没成…

Serverless冷扩机器在压测中被击穿问题 | 京东云技术团队

一、现象回顾 在今天ForceBot全链路压测中&#xff0c;有位同事负责的服务做Serverless扩容&#xff08;负载达到50%之后自动扩容并上线接入流量&#xff09;中&#xff0c;发现新扩容的机器被击穿&#xff0c;监控如下&#xff08;关注2:40-3:15时间段的数据&#xff09;&…

人工智能AI 计算平台介绍

人工智能AI计算平台介绍 产品及服务&#xff1a; 标准模块开源 核心模块及服务收费 资源齐全 服务支持 产品使用者&#xff1a; 自行扩充组件 快速二次开发 轻松搭建企业级 数据挖掘应用 自…

linux0.12-10-1-总体功能

第10章 字符设备驱动程序 [466页] 10-1 总体功能 本章的程序可分成三部分: 第一部分是是关于RS-232串行线路驱动程序&#xff0c;包括程序rs_io.s和serial.c&#xff1b; 第二部分是涉及控制台的驱动程序&#xff0c;包括键盘中断驱动程序keyboard.S和控制台显示驱动程序con…

人工智能AI会话+文字转为markdown格式/思维导图的工具的介绍和使用

AI会话工具和文字转换为markdown格式 1、这里首先要有一个xmind思维导图软件&#xff0c;下载链接在下方。XMind: 2、本章中列举的AI工具是近期国内交火的prompt&#xff08;文心一言 作者还没排上队&#xff09; https://chat.givemeprompt.com/3、首先运用此工具生成你想要的…

leetcode刷题之数组问题总结,二分法,移除元素,

目录 一、二分查找相关应用704.二分查找35.搜索插入位置方法一:二分法暴力解法 34.在排序数组中查找元素的开始位置和最后一个位置方法一&#xff1a;暴力解法方法二&#xff1a;二分法&#xff0c;确定左右两侧的边界 69.x的平方根方法一:二分法方法二&#xff1a;暴力解法错解…

k8s1.26.1部署 ingress-nginx-controller(1.6.4)

文章目录 参考ingress-nginx git地址ingress-nginx 的 deployment的地址&#xff1a; 参考 1.24版本k8s集群配置Nginx-Ingressrancher配置https域名访问图文教程 ingress-nginx git地址 https://github.com/kubernetes/ingress-nginx ingress-nginx 的 deployment的地址&a…

cdn配置(超详细+图解+原理)

具体的详细配置在右侧目录翻到“三”&#xff0c;前面的一二是将原理 以腾讯云的cdn为例&#xff0c;其它家的大同小异 一、cdn作用和配置思路 &#xff08;一&#xff09;cdn作用 1.加速访问 cdn服务通常有多个节点缓存&#xff0c;用户可以就近获取&#xff0c;延迟较低 …

得物App万米高空WiFi拦截记

0.前情摘要 在一次飞行途中&#xff0c;我司客户遭遇到了得物App在飞机上的WiFi网络访问异常的问题。这让我们意识到在特定场景下&#xff0c;用户可能面临无法使用得物App的困扰。经过SRE团队与无线团队、网络团队联合全力排查与优化&#xff0c;最终成功解决了这一问题&…

PAN(Pyramid Attention Network for semantic segmentation)paper解读

Pyramid Attention Network for Semantic Segmentation讲PAN用于语义分割&#xff0c;网络结构类似encoder-decode, u-shape。 背景 encoder-decoder结构&#xff0c; 在encoding到高维度特征的过程中&#xff0c;原始的纹理信息会遭遇空间分辨率损失&#xff0c;例如FCN。 P…

Spring Boot进阶(39):SpringBoot之Jackson配置全局时间日期格式 | 超级详细,建议收藏

1. 前言&#x1f525; 不知道小伙伴对于日期字段&#xff0c;在项目中都是如何处理的&#xff0c;是单独给每个字段都自定义日期格式还是做全局格式设置&#xff1f;这个我之前啊&#xff0c;是对日期都是有做单独配置&#xff0c;给每个Entity带有日期字段的都配JsonFormat注解…

SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

生态系统服务是人类从自然界中获得的直接或间接惠益&#xff0c;可分为供给服务、文化服务、调节服务和支持服务4类&#xff0c;对提升人类福祉具有重大意义&#xff0c;且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目&#xff08;Millennium Ecosystem Asse…

编译器设计(十四)——寄存器分配

文章目录 一、简介二、背景问题2.1 内存与寄存器2.2 分配与指派2.3 寄存器类别 三、局部寄存器分配和指派3.1 自顶向下的局部寄存器分配3.2 自底向上的局部寄存器分配3.3 超越单个程序块 四、全局寄存器分配和指派4.1 了解图着色4.2 找到全局活跃范围4.3 估算全局逐出代价4.4 冲…