Kotlin让属性只能被赋值一次且不能为空
2017-06-15 12:01
851 查看
有时候要求一个属性只能赋值一次,且不能为空,可以用下面的方法
本文地址: http://blog.csdn.net/qq_25806863/article/details/73277876
然后对属性使用就行了:
这样所有需要实现这个需求的属性都可以用这个委托来实现。
本文地址: http://blog.csdn.net/qq_25806863/article/details/73277876
用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 } }
这样所有需要实现这个需求的属性都可以用这个委托来实现。
相关文章推荐
- GDI+ PNG背景透明窗口 初始化调用一次 必须有layer属性,image*注意赋值
- ajaxFileUpload只能上传一次,和上传同名图片不能上传等bug问题
- 如何实现combobox只能从列表中选择但是同时又允许赋值,就是不能在框里输入信息.
- Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)
- 重写DataGridViewColumn新增属性的值在设计器中赋值后不能保存的问题
- Python3基础 一个类中有两个属性A,B。 只能对其中的一个进行赋值
- Codeforces Beta Round #69 (Div. 2 Only) E树型DP 一树,每个结点有虫子,一次只能吃一只,不能停留,问从根结点出发再回到根结点最多能吃多少只虫子
- 全局变量只能初始化不能赋值
- Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)
- struts2 模型驱动Action属性 -标签 -Action属性不能赋值。
- 打印九九乘法表,要求:只能使用一次for循环,不能使用递归,while
- linux中chmod一次只能赋值一个权限
- 为什么索引属性只能用一次?
- 用 iTextSharp 修改 PDF 文件的属性--》只能看,不能复制,列印
- @RequestBody 只能与@RequestHeader同用 不能与@RequestParam (实现迭代函数部分方法只调用一次,之后传递下去)
- 在界面跳转的时候,控制器调用prepareForSegue方法,为什么不能目的控制器的imageView属性赋值
- Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)
- C++有哪几种情况只能用初始化列表,而不能用赋值?
- Kotlin的属性委托:无上下文情况下Android的赋值(KAD 15)
- yii中model的attributes属性不能赋值