Kotlin修飾符lateinit(延遲初始化)案例詳解
- Kotlin定義變量一般有如下寫(xiě)法
lateinit var name: String var age: String? = null
那么用lateinit 修飾和下面那種有什么區(qū)別呢,我們來(lái)看一下這兩行代碼反編譯成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方法中進(jìn)行了非空判斷
而 age 屬性添加了 @Nullable
當(dāng)我們調(diào)用name的時(shí)候,會(huì)拋出異常
println(AddStr().name)
Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property name has not been initialized
當(dāng)輸出age屬性的時(shí)候則輸出 null
- lateinit 不能用來(lái)修飾基本數(shù)據(jù)類(lèi)型,因?yàn)榛绢?lèi)型的屬性在類(lèi)加載后的準(zhǔn)備階段都會(huì)被初始化為默認(rèn)值
- lateinit不能修飾val變量,只能修飾可變的屬性
到此這篇關(guān)于Kotlin修飾符lateinit(延遲初始化)案例詳解的文章就介紹到這了,更多相關(guān)Kotlin修飾符lateinit(延遲初始化)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java數(shù)組轉(zhuǎn)List及Stream的基本方法使用方法
Java?的?Stream?流操作是一種簡(jiǎn)潔而強(qiáng)大的處理集合數(shù)據(jù)的方式,允許對(duì)數(shù)據(jù)進(jìn)行高效的操作,如過(guò)濾、映射、排序和聚合,這篇文章主要介紹了Java數(shù)組轉(zhuǎn)List及Stream的基本方法使用教程,需要的朋友可以參考下2024-08-08Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼(一)
這篇文章主要介紹了Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05如何使用Spring工具類(lèi)動(dòng)態(tài)匹配url
這篇文章主要介紹了如何使用Spring工具類(lèi)動(dòng)態(tài)匹配url,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Spring Security的過(guò)濾器鏈機(jī)制
過(guò)濾器作為 ?Spring Security? 的重中之重,我們需要了解其中的機(jī)制,這樣我們才能根據(jù)業(yè)務(wù)需求的變化進(jìn)行定制,今天來(lái)探討一下 ?Spring Security? 中的過(guò)濾器鏈機(jī)制2022-08-08Java加載本地庫(kù)的方法之System.load與System.loadLibrary
最近在做的工作要用到本地方法,所以下面這篇文章主要介紹了Java加載本地庫(kù)的方法之System.load與System.loadLibrary的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09Springboot @Value獲取值為空問(wèn)題解決方案
這篇文章主要介紹了Springboot @Value獲取值為空問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Springboot啟動(dòng)原理和自動(dòng)配置原理解析
這篇文章主要介紹了Springboot啟動(dòng)原理和自動(dòng)配置原理解析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04