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

Kotlin关键字when的详细用法

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

一、基本语法

基本的when语法如下:

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

二、匹配多个条件

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

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

三、范围检查

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

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

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也可以不带参数,这时可以用作更灵活的条件语句:

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还可以直接作为表达式返回一个值:

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编程技能。

参考链接

在这里插入图片描述

### 若依积木报表 Token 使用方法及问题解决 #### 1. 集成 JimuReport 并配置 Token 传递 为了使 `/jmreport/view` 接口能够正常工作并验证用户的合法性,必须确保每次请求都携带有效的 `token`。当不带有 `token` 访问该路径时,系统将会返回错误提示[^1]。 对于 Ruoyi Vue 版本来说,在集成过程中可以参照官方文档中的具体步骤来完成初步设置,并在此基础上加入必要的安全措施以支持基于令牌的身份认证机制[^3]。 ```javascript // 示例:前端发送带Token的HTTP请求 axios({ method: 'get', url: '/jmreport/view', headers: { Authorization: 'Bearer your_token_here' } }); ``` #### 2. 处理数据权限与自定义条件字段 如果遇到因缺少适当的数据权限而导致无法获取预期结果的情况,则可能是因为当前登录账户不具备足够的操作许可;此时可以通过调整后台管理系统的角色分配或是修改源码逻辑来进行优化处理[^4]。 另外值得注意的是,在某些场景下还需要扩展服务端接口的功能——即通过重写 `JimuReportTokenService.getUserInfo()` 方法向其中添加额外的信息项作为查询参数的一部分,从而实现更灵活多样的业务需求满足方式。 #### 3. 解决常见问题 - **未提供有效Token**: 当尝试访问受保护资源而未能成功提交合法凭证时,服务器通常会给出相应的状态码(如401 Unauthorized),这时应检查客户端代码是否正确设置了身份验证头以及所使用的密钥是否仍然处于激活状态。 - **跨域资源共享(CORS)**: 如果应用程序部署于不同域名之下,则可能会面临浏览器出于安全性考虑阻止Ajax调用的现象发生。对此建议开发者们可以在API网关处统一开启CORS策略或者利用JSONP技术绕过此限制[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑风风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值