
56
|
第
3
章
函数)内赋值,因为它们的值必须在编译时可知。
考虑为一个任务定义最小优先级与最大优先级,参见示例 3-1。
示例 3-1:定义编译时常量
class Task(val name: String, _priority: Int = DEFAULT_PRIORITY) {
companion object {
const val MIN_PRIORITY = 1
➊
const val MAX_PRIORITY = 5
➊
const val DEFAULT_PRIORITY = 3
➊
}
var priority = validPriority(_priority)
➋
set(value) {
field = validPriority(value)
}
private fun validPriority(p: Int) =
➌
p.coerceIn(MIN_PRIORITY, MAX_PRIORITY)
}
➊
编译时常量。
➋
拥有自定义 setter 的属性。
➌
私有的验证函数。
在本示例中,使用了 Kotlin(以 及 Java)中常见的全部字母大写的建议来定义常量。本
示例还利用了自定义 setter 操作,可以将任何提供的优先级映射到给定范围。
注 意,val 是一个Kotlin 关键字,但是const 是一个修饰符,就如同private、
inline 以及其他更多修饰符一样。这就是为什么 const 必须与 val 一起使用而不是
代替 val。
参阅
3.2 节涵盖了关于自定义 ...