對比Java講解Kotlin中?.與!!.的區(qū)別
前言
本文主要介紹了關(guān)于Kotlin中?.與!!.的區(qū)別,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧
1、?.
//kotlin:
a?.foo()
//相當(dāng)于java:
if(a!=null){
a.foo();
}
2、!!.
//kotlin:
a!!.foo()
//相當(dāng)于java:
if(a!=null){
a.foo();
}else{
throw new KotlinNullPointException();
}
時(shí)間寶貴的同學(xué)可以不要看下面的了(` _ `)
3、再來說下"!!"
值得一提的是,當(dāng)我們直接調(diào)用一個(gè)可空變量的某方法或某成員變量時(shí):

直接調(diào)用,報(bào)錯(cuò)提示
Android Studio會提示在一個(gè)可空變量上,只有"安全調(diào)用"(safe call (?.))和"不為空的斷言調(diào)用"(non-null assert call(!!.))是被允許的,可以得知"!!"相當(dāng)于是斷言操作,即:
//(Kotlin)
a!!.foo()
//等于(Kotlin):
a!!
a.foo()
//相當(dāng)于(Java):
assert a!=null;
a.foo();
//也就相當(dāng)于(Java):
if(a == null){
throw new NullPointException();
}
a.foo();
進(jìn)而有上面第2點(diǎn)結(jié)論。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Java使用mapstruct實(shí)現(xiàn)對象拷貝
MapStruct可以簡化對象之間的映射,本文就來介紹一下Java使用mapstruct實(shí)現(xiàn)對象拷貝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
java數(shù)組的三種擴(kuò)容方式以及程序?qū)崿F(xiàn)詳解
這篇文章主要介紹了java數(shù)組的三種擴(kuò)容方式以及程序?qū)崿F(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Java 8 Stream Api 中的 map和 flatMap 操作方法
Java 8提供了非常好用的 Stream API ,可以很方便的操作集合。今天通過這篇文章給大家分享Java 8 Stream Api 中的 map和 flatMap 操作方法,需要的朋友可以參考下2019-11-11
SpringBoot 使用 OpenAPI3 規(guī)范整合 knife4j的詳細(xì)過程
Swagger工具集使用OpenAPI規(guī)范,可以生成、展示和測試基于OpenAPI規(guī)范的API文檔,并提供了生成客戶端代碼的功能,本文給大家介紹SpringBoot使用OpenAPI3規(guī)范整合knife4j的詳細(xì)過程,感興趣的朋友跟隨小編一起看看吧2023-12-12
JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解
這篇文章主要介紹了JavaFX 監(jiān)聽窗口關(guān)閉事件實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-05-05

