Kotlin(编程语言)让属性只能被赋值一次且不能为空
2021/9/23 17:12:21
本文主要是介绍Kotlin(编程语言)让属性只能被赋值一次且不能为空,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
有时候要求一个属性只能赋值一次,且不能为空,可以用下面的方法
用get和set
利用属性的get()和set()对值进行控制:
class APP : Application() { companion object { var app: Application? = null set(value) { field = if (field == null&& value!=null) value else throw IllegalStateException("不能设置为null,或已经有了") } get() { return field ?: throw IllegalStateException("还没有被赋值") } } override fun onCreate() { super.onCreate() app = this } }
用委托实现
自定义一个委托属性:
class NotNUllSingleVar<T> : ReadWriteProperty<Any?, T> { private var value: T? = null override fun getValue(thisRef: Any?, property: KProperty<*>): T { return value ?: throw IllegalStateException("还没有被赋值") } override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { this.value = if (this.value == null&&value!=null) value else throw IllegalStateException("不能设置为null,或已经有了") } }
然后对属性使用就行了:
class APP : Application() { companion object { var app: Application? by NotNUllSingleVar() } override fun onCreate() { super.onCreate() app = this } }
这样所有需要实现这个需求的属性都可以用这个委托来实现。
这篇关于Kotlin(编程语言)让属性只能被赋值一次且不能为空的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-01-06Kotlin委托属性(1)
- 2023-06-15Kotlin协程-那些理不清乱不明的关系
- 2023-06-08[Kotlin Tutorials 21] 协程的取消
- 2023-05-26Kotlin难点
- 2023-02-23【备战春招】第16天 Kotlin实用技巧
- 2023-02-23【备战春招】第15天 Kotlin扩展Extensions技术探秘
- 2023-02-22【备战春招】第14天 深入理解Kotlin注解
- 2023-02-21【备战春招】第12天 深入理解Kotlin类与接口
- 2023-02-21【备战春招】第13天 深入理解Kotlin泛型
- 2023-02-18【备战春招】第10天 Kotlin方法与Lambda表达式