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 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值

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

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

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

来源: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
  • asp之家 软件编程 m.aspxhome.com