软件编程
位置:首页>> 软件编程>> java编程>> Kotlin修饰符lateinit(延迟初始化)案例详解

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

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

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

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

来源:https://blog.csdn.net/ldxlz224/article/details/95091943

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com