- 带问号的代表可以置空的变量
- 不带问号的代表不可为空的变量
kotlinc-jvm 中测试一下
打开 kotlinc-jvm,输入测试代码
>>> var i: Int = 1 >>> var i: Int = null error: null can not be a value of a non-null type Int var i: Int = null ^
>>> var i: Int? = null
从上面 Kotlin 测试代码可见,指定类型的变量在不加问号的情况下,不能初始化为 null。
>>> var j: Int = 1
>>> j = 2
>>> j = null
error: null can not be a value of a non-null type Int
j = null
^
不加问号的变量,在初始化之后,无法再次赋值为 null。
为何需要可为空类型的变量
以 Android 应用为例,APP 首页有个图片,在点击按钮后需要切换另一个图片。为了优化性能需要将ImageView 对象定义为 Activity Class 的属性,然后在 onCreate 里进行绑定。在 onCreate 之前,ImageView 对象没有被赋值,所以应该是 null。理论应该是
var homeImage: ImageView? = null
但是这样就失去了不可为空类型存在的意义,因为 onCreate 之后,ImageView 就不应该为空。
lateinit var homeImage: ImageView
合理的做法是,使用 lateinit。
error: 'lateinit' modifier is not allowed on properties of primitive types
>>> lateinit var k: Int
error: 'lateinit' modifier is not allowed on properties of primitive types
lateinit var k: Int
^
但是需要注意的是,lateinit 不能使用在基础类型上,基础类型包括
- byte, short, int, long
- float, double
- char
- boolean
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式