- 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 不能用來修飾基本數據類型,因為基本類型的屬性在類加載后的準備階段都會被初始化為默認值
- lateinit不能修飾val變量,只能修飾可變的屬性
到此這篇關于Kotlin修飾符lateinit(延遲初始化)案例詳解的文章就介紹到這了,更多相關Kotlin修飾符lateinit(延遲初始化)內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/ldxlz224/article/details/95091943