服务器之家

服务器之家 > 正文

Kotlin修饰符lateinit(延迟初始化)案例详解

时间:2021-12-15 12:43     来源/作者:ldxlz224
  • Kotlin定义变量一般有如下写法
?
1
2
lateinit var name: String
var age: String? = null

那么用lateinit 修饰和下面那种有什么区别呢,我们来看一下这两行代码反编译成java代码是什么样子的。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@NotNull
public String name;
@Nullable
private String age;
 
@NotNull
public final String getName() {
   String var10000 = this.name;
   if (this.name == null) {
      Intrinsics.throwUninitializedPropertyAccessException("name");
   }
 
   return var10000;
}
 
public final void setName(@NotNull String var1) {
   Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
   this.name = var1;
}
 
@Nullable
public final String getAge() {
   return this.age;
}
 
public final void setAge(@Nullable String var1) {
   this.age = var1;
}

可以看到在 name 属性添加了 @NotNull注解,并且在getName和setName方法中进行了非空判断
而 age 属性添加了 @Nullable

当我们调用name的时候,会抛出异常

?
1
println(AddStr().name)

Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property name has not been initialized

当输出age属性的时候则输出 null

  • lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值

Kotlin修饰符lateinit(延迟初始化)案例详解

  • lateinit不能修饰val变量,只能修饰可变的属性

Kotlin修饰符lateinit(延迟初始化)案例详解

到此这篇关于Kotlin修饰符lateinit(延迟初始化)案例详解的文章就介绍到这了,更多相关Kotlin修饰符lateinit(延迟初始化)内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/ldxlz224/article/details/95091943

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部