Kotlin修饰符lateinit(延迟初始化)案例详解
作者:ldxlz224 时间:2023-08-22 08:21:56
Kotlin定义变量一般有如下写法
lateinit var name: String
var age: String? = null
那么用lateinit 修饰和下面那种有什么区别呢,我们来看一下这两行代码反编译成java代码是什么样子的。
@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的时候,会抛出异常
println(AddStr().name)
Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property name has not been initialized
当输出age属性的时候则输出 null
lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值
lateinit不能修饰val变量,只能修饰可变的属性
来源:https://blog.csdn.net/ldxlz224/article/details/95091943
标签:Kotlin,lateinit
0
投稿
猜你喜欢
SpringBoot集成SpringSecurity和JWT做登陆鉴权的实现
2023-01-29 09:34:57
C++编程异常处理中try和throw以及catch语句的用法
2023-04-08 15:29:41
深入浅析c#静态多态性与动态多态性
2022-10-16 09:41:17
C#表达式和运算符详细解析
2021-09-30 23:39:09
Java 面向对象和封装全面梳理总结
2023-10-16 08:20:27
Android切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题的解决方法
2023-07-21 10:51:45
算法练习之从String.indexOf的模拟实现开始
2023-02-23 09:20:40
详解Idea 2019.2 安装lombok插件失效问题解决
2023-05-01 09:22:59
详解Spring Cloud Zuul 服务网关
2021-11-15 19:24:19
Java Servlet3.0异步处理问题
2023-08-12 00:52:05
Maven本地打包war包实现代码解析
2021-09-06 12:51:14
C#实现无损压缩图片代码示例
2022-01-23 19:59:25
macOS上使用gperftools定位Java内存泄漏问题及解决方案
2023-03-02 11:42:38
Android Studio实现带三角函数对数运算功能的高级计算器
2022-08-21 05:02:47
Java 基于tcp协议实现文件上传
2022-04-14 04:01:29
JavaWeb实现用户登录与注册功能
2022-08-30 17:23:48
C#实现图书管理系统
2023-03-24 04:30:35
C#实现简单的计算器功能
2021-05-31 01:52:46
ES结合java代码聚合查询详细示例
2022-08-31 01:23:29
android中AutoCompleteTextView的简单用法(实现搜索历史)
2023-01-08 18:33:01