Kotlin 边界限制

文章目录

Kotlin 边界限制

传统方式

kotlin 复制代码
fun processScore(score: Int): Int {
    if (score < 0) {
        return 0
    } else if (score > 100) {
        return 100
    }
    return score
}

println(processScore(-10)) // 0
println(processScore(80)) // 80
println(processScore(120)) // 100

coerceIn

coerceIn():限制值的范围,超出范围则返回边界值。

kotlin 复制代码
fun processScore2(score: Int): Int {
    return score.coerceIn(0, 100)
}

println(processScore2(-10)) // 0
println(processScore2(80)) // 80
println(processScore2(120)) // 100

coerceAtLeast

coerceAtLeast():限制下限,低于下限值则返回下限值。

kotlin 复制代码
fun processScore3(score: Int): Int {
    return score.coerceAtLeast(0)
}

println(processScore3(-10)) // 0
println(processScore3(80)) // 80
println(processScore3(120)) // 120

coerceAtMost

coerceAtMost():限制上限,高于上限值则返回上限值。

kotlin 复制代码
fun processScore4(score: Int): Int {
    return score.coerceAtMost(100)
}

println(processScore4(-10)) // -10
println(processScore4(80)) // 80
println(processScore4(120)) // 100

自定义类型

kotlin 复制代码
// 自定义Comparable类
data class MyDate(val year: Int, val month: Int, val day: Int) : Comparable<MyDate> {
    override fun compareTo(other: MyDate): Int {
        return compareValuesBy(this, other,
                               { it.year }, { it.month }, { it.day })
    }
}

// 定义扩展函数
fun <T : Comparable<T>> T.coerceIn(min: T, max: T): T {
    if (this < min) {
        return min
    } else if (this > max) {
        return max
    }
    return this
}

fun processDate(date: MyDate): MyDate {
    val minDate = MyDate(2024, 1, 1)
    val maxDate = MyDate(2024, 12, 31)
    return date.coerceIn(minDate, maxDate)
}

val date = MyDate(2023, 2, 30)
println(processDate(date)) // MyDate(year=2024, month=1, day=1)
val date2 = MyDate(2024, 1, 1)
println(processDate(date2)) // MyDate(year=2024, month=1, day=1)
val date3 = MyDate(2025, 1, 1)
println(processDate(date3)) // MyDate(year=2024, month=12, day=31)
相关推荐
KotlinKUG贵州11 小时前
Kotlin/Ktor 实践:利用 MCP 从零打造 AI Agent 服务端指南
kotlin·agent·mcp
喜熊的Btm11 小时前
探索 Kotlin 的不可变集合库
kotlin·android jetpack
モンキー・D・小菜鸡儿2 天前
Android 中 StateFlow 的使用
android·kotlin
我又来搬代码了2 天前
【Android】【Compose】Compose知识点复习(一)
android·前端·kotlin·android studio
hnlgzb2 天前
好像kotlin class和kotlin file都可以是activity?
android·开发语言·kotlin
zhangphil2 天前
Kotlin超时withTimeout超时与ensureActive()取消协程任务执行
kotlin
hnlgzb2 天前
安卓app开发,如何快速上手kotlin和compose的开发?
android·开发语言·kotlin
alexhilton2 天前
Jetpack Compose 2025年12月版本新增功能
android·kotlin·android jetpack
lin62534223 天前
Android九宫格,1张图到9张图适配;图片自定义UI
android·ui·kotlin