Kotlin 边界限制
文章目录
- Kotlin 边界限制
- 传统方式
- coerceIn
- coerceAtLeast
- coerceAtMost
- 自定义类型
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():限制值的范围,超出范围则返回边界值。
fun processScore2(score: Int): Int {return score.coerceIn(0, 100)
}println(processScore2(-10)) // 0
println(processScore2(80)) // 80
println(processScore2(120)) // 100
coerceAtLeast
coerceAtLeast():限制下限,低于下限值则返回下限值。
fun processScore3(score: Int): Int {return score.coerceAtLeast(0)
}println(processScore3(-10)) // 0
println(processScore3(80)) // 80
println(processScore3(120)) // 120
coerceAtMost
coerceAtMost():限制上限,高于上限值则返回上限值。
fun processScore4(score: Int): Int {return score.coerceAtMost(100)
}println(processScore4(-10)) // -10
println(processScore4(80)) // 80
println(processScore4(120)) // 100
自定义类型
// 自定义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)