Kotlin:关键字之lateinit

简介: Kotlin:关键字之lateinit

Kotlin中定义变量或者属性都是需要初始化值的,并且其都是private的,但是有些时候对于变量或者属性只需要声明,但是不需要初始化,则kotlin提供了lateinit关键字来实现:

class Student {
    lateinit var name: String
    var address :String = "北京"
    lateinit val sex :String 
    lateinit var age: Int
    lateinit var sorce : Double 
    var studentNumber1 :Int
    var studentNumber2 :Int = 0
}

image.png从上图可以看出编辑器所出现的错误可以总结出在使用lateinit是需要注意的事项:


lateinit 对应使用var来声明属性

lateinit 不可以修饰原始数据类型(byte,char,short ,int,long,float,double)

1

2

也许有人会问到为什么为什么不可以修饰原始数据类型


对于对象类型,Kotlin使用 null 值,以标记 lateinit 属性尚未初始化,并在访问该属性时引发适当的异常。

对于原始类型,没有这样的值,因此无法将属性标记为未初始化并提供的诊断信息lateinit 需要提供。 (我们可以尝试使用某种单独的标记,但是在通过反射初始化字段时不会更新该标记,这是 lateinit 的主要用例)。


因此,仅对象类型的属性支持 lateinit


但是


lateinit 是一个坑,对于新手来说还是一个不小的坑


在 Kotlin 代码中慎用 lateinit 属性


这位作者解释的很清楚了


对于 Kotlin 新手来说,应该抛开 Java 式的写法,牢记类属性的三种初始化方式:


主构造函数内定义属性,使用传入的参数初始化属性;

类体内定义属性,同时初始化;

类体内定义属性,init 块里初始化。

最后再提一下Kotlin lateinit 和 by lazy 的区别:

1.lazy{} 只能用在val类型, lateinit 只能用在var类型 如 :

val name: String by lazy { “sherlbon” }

lateinit var adapter: MyAdapter12


2.lateinit不能用在可空的属性上和java的基本类型上 如:

lateinit var age: Int //会报错1


3.lateinit可以在任何位置初始化并且可以初始化多次。而lazy在第一次被调用时就被初始化,想要被改变只能重新定义

4.lateinit 有支持(反向)域(Backing Fields)


目录
相关文章
|
9月前
|
Java API 调度
Kotlin 中的suspend 关键字
Kotlin 中的suspend 关键字
87 0
|
10月前
|
API Kotlin
Kotlin中扩展函数、infix关键字、apply函数和DSL的详解
Kotlin中扩展函数、infix关键字、apply函数和DSL的详解
82 0
|
10月前
|
Kotlin
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
64 0
|
10月前
|
Kotlin
Kotlin中继承、类型转换、Any超类、object关键字详解
Kotlin中继承、类型转换、Any超类、object关键字详解
97 0
|
10月前
|
Kotlin
Kotlin 中定义类、field关键字,主构造函数和次构造函数详解
Kotlin 中定义类、field关键字,主构造函数和次构造函数详解
96 0
|
8月前
|
存储 Java 编译器
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(下)
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(下)
35 0
|
8月前
|
Java Android开发 开发者
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(上)
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(上)
56 0
|
10月前
|
Java Kotlin
Kotlin 中初始化块、初始化的顺序、lateinit延迟初始化详解
Kotlin 中初始化块、初始化的顺序、lateinit延迟初始化详解
65 0
|
11月前
|
Java 开发者 Kotlin
Kotlin中的 lateinit 和 by lazy
Kotlin中的 lateinit 和 by lazy
140 0
|
Java 程序员 编译器
01. Kotlin 标识符、关键字和注释
01. Kotlin 标识符、关键字和注释
82 0