Kotlin修饰符lateinit(延迟初始化)案例详解
作者:ldxlz224 发布时间:2023-08-22 08:21:56
标签:Kotlin,lateinit
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


猜你喜欢
- Linux Hadoop 2.7.3 安装搭建Hadoop实现了一个分布式文件系统(Hadoop Distributed File Syst
- 一般我们用它来自动帮我们注册APT文件(全称是Annotation Process Tool,或者叫注解处理器,AbstractProces
- 随着手机性能的提高,以及iOS和Android两个平台的普及,更多的App都会选择两个平台的App都进行开发,在有些时候,为了更加快速的开发
- 以前在别的地方见过一个通过调用系统API实现屏幕截图的例子,从内心来说我不太喜欢在C#代码中出现这种情况,现在什么都讲“和谐”,我觉得这种做
- 一、查看线程的运行状态题目线程有以下6种状态:新建、运行、阻塞、等待、计时等待和终止。new新线程时,线程处于新建 状态。调用start()
- 出现这种错误的原因可能是:1.本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。2.jdk版本不适用于这个Idea,很典型的一个例
- 类和对象的关系类就是一类对象的统称。对象就是这一类具体化的一个实例。 (对象是类的实例化)对象是什么?此对象非彼对象!!!😂说到对象就要提到
- Unity Shader学习:玻璃材质,供大家参考。主要是通过反射和折射来达到透明的效果,用菲涅尔来混叠。shader部分:Shader &
- 一,概念1,排序排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 平时的上下文中,如果提到排序,通常指的
- 用AndroidStudio编写高级计算器带三角函数对数运算功能界面效果图:layout布局 activity_jisuanqi.xml代码
- 这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作update更新传回数据的所有字段,没有传
- 前言在阅读本文之前, 希望你可以思考一下下面几个问题, 带着问题去阅读文章会获得更好的效果。发送消息的时候, 当Broker挂掉了,消息体还
- Android EditText密码的隐藏和显示功能实现效果图:实现代码:首先在xml里创建两个控件 EditText和CheckBox然后
- 这只是初步的实现,并没有加入自动编译等功能。需要手动更改更新的xml文件和最新的apk。 共涉及到四个文
- datagridview手动添加行数据我在做软件模型界面时,通过功能按钮触发显示的datagridview中,为了方便,需要一些数据,仅写死
- 功能描述1、创建扑克牌。包括四种花色(黑桃,红心,梅花,方块),十三种点数(2-10,J,Q,K),不考虑大小王。2、创建两个玩家。包括玩家
- MyBatis 别名typeAliases的设置第一种:通过在配置文件中typeAlias节点设置type的方式<?xml versi
- 1、定义常量(1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的
- 当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免
- 下面将源代码贴出。 public static class ChineseToPinYin { private static readonl