Kotlin关键字`when`的详细用法

embedded/2025/3/15 3:09:51/

Kotlin关键字when的详细用法

在Kotlin中,when是一个强大的控制流语句,相当于其他语言中的switch语句,但更加强大且灵活。本文将详细讲解when的用法及其常见场景,并与Java的switch语句进行对比。

一、基本语法

基本的when语法如下:

kotlin">val number = 3
when (number) {1 -> println("One")2 -> println("Two")3 -> println("Three")else -> println("Unknown")
}

二、匹配多个条件

可以使用逗号,分隔多个匹配条件:

kotlin">val day = "Saturday"
when (day) {"Saturday", "Sunday" -> println("Weekend")else -> println("Weekday")
}

三、范围检查

使用in关键字可以判断一个值是否在一个范围或集合内:

kotlin">val score = 85
when (score) {in 90..100 -> println("Excellent")in 75..89 -> println("Good")in 60..74 -> println("Pass")else -> println("Fail")
}

四、类型检查

when还可以用于类型检查,相当于Java中的instanceof

kotlin">val obj: Any = "Hello Kotlin"
when (obj) {is String -> println("It's a String")is Int -> println("It's an Integer")else -> println("Unknown type")
}

五、不带参数的when

when也可以不带参数,这时可以用作更灵活的条件语句:

kotlin">val number = 15
when {number % 3 == 0 && number % 5 == 0 -> println("FizzBuzz")number % 3 == 0 -> println("Fizz")number % 5 == 0 -> println("Buzz")else -> println(number)
}

六、作为表达式使用

Kotlin的when还可以直接作为表达式返回一个值:

kotlin">val score = 78
val result = when (score) {in 90..100 -> "A"in 80..89 -> "B"in 70..79 -> "C"else -> "D"
}
println("Grade: $result")

七、与Java的switch语句对比

与Java的switch相比,Kotlin的when更加灵活强大:

  • Java的switch仅支持基本类型(如int、byte、short、char)、它们的包装类、枚举类型和String类型。
  • Kotlin的when支持任意类型的表达式,包括范围检查、类型检查、集合检查等更高级的特性。
  • Kotlin的when可以作为表达式直接返回值,而Java的switch语句在Java 14之前无法做到。

八、注意事项

  • when表达式必须是详尽的,或者必须包含else分支。
  • 在使用类型检查时,编译器会自动进行智能类型转换。

九、总结

Kotlin的when关键字通过更简洁的语法和强大的功能,极大提升了代码的可读性和可维护性。合理使用when可以让代码更优雅、更清晰。

希望本文能够帮助你更好地理解并掌握when的用法,提升你的Kotlin编程技能。

参考链接

  • Kotlin官方文档 - When表达式
  • Java官方文档 - Switch语句
  • Kotlin官方文档 - 控制流

在这里插入图片描述


http://www.ppmy.cn/embedded/172651.html

相关文章

leetCode求两数之和(第一题)

一、题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答…

接入手机后,DeepSeek难“转正”

2025开年之后,手机圈掀起了一场诡异的AI军备竞赛——争相接入DeepSeek。随着时间的推移,这股年初的狂热已然降温。 当潮水退去之后,暴露出手机AI领域的残酷真相:市面上手机自带的AI能力,没能像DeepSeek一样&#xff0c…

celery入门

按照Celery 官方文档,用 Django Celery Redis 写的一个简单项目 如需转载,标记出处 环境准备 1. 安装依赖 pip install django celery redis 创建 Django 项目 1. 创建 Django 项目和 APP django-admin startproject myproject cd myproject python …

Spring Boot 项目中application.yml 和 bootstrap.yml 文件的区别

application.yml 和 bootstrap.yml 文件都是 Spring Boot 项目中用于配置应用程序的 YAML 或 Properties 文件,但它们在加载顺序、用途和优先级上存在关键的区别。 核心区别概览: 特性bootstrap.yml / bootstrap.propertiesapplication.yml / application.propert…

STM32之I2C硬件外设

注意:硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数…

linux centos 忘记root密码拯救

在CentOS 7中,如果忘记root密码,可以通过修改系统启动参数进入单用户模式或紧急模式进行重置。以下是两种常用方法,适用于物理机或虚拟机环境: 方法一:通过rd.break参数重置密码 步骤: 重启系统并进入GRU…

Yashan DB 应用开发

一、YashanDB支持的驱动 YashanDB支持多种驱动,包括JDBC、C、Python、ADO.NET、ODBC等。以下是详细介绍: 1.JDBC驱动 • 定义:JDBC是Java连接数据库的技术统称。Java语言只提供规范(接口),规定数据库操作…

益百分用科技与艾文化深度融合重新定义艾草产业

益百分用科技与艾文化深度融合重新定义艾草产业 益百分是一家致力于用科技赋能艾文化的企业,专注于将现代科技与传统艾草文化相结合,推动艾草产业的创新与发展。通过科技手段,益百分旨在提升艾草产品的品质、生产效率以及用户体验&#xff0…