網站首頁 編程語言 正文
正文
首先非空變量和可空變量的區(qū)別:
// name為不可為空的變量, 不能賦值為null ,若有判斷 if(name==null) 無意義,因為肯定不為null
var name : String = ""
// role 為可空變量
var role : String? = ""
非空變量賦值為Null為報如下錯誤:
一、判斷可空變量是否為null的方式
1、
var name : String ?= ""
if (name == null){
Log.i(Tag,"name==null")
}else{
Log.i(Tag, "name!=null")
}
2、
?.的意思為若name為null 。則返回null
var name : String ?= "abc"
Log.i(Tag,"name="+name?.length)
二、涉及到返回可空值的函數使用方法,在返回類型后同時加?
var name:String?="abc"
fun getNameLength():String?{
return name
}
三、let操作符
用法:變量?.let{ ... } , 作用為忽略null的情況
例如篩選出一個集合非空的元素集合
常規(guī)寫法:
fun logUnNullList(arr:Array<String>):Unit{
for (item in arr){
if (arr==null){
continue
}else{
Log.i(Tag,"非空元素為->"+item)
}
}
}
用let操作符寫法:
fun logUnNullList(arr:Array<String>):Unit{
for (item in arr){
item?.let {Log.i(Tag,"非空元素為->"+item) }
}
}
四、Evils操作符(?: !! as)
1、?:
對于一個可空變量的使用,若當該變量為空的時候賦予一個特定值使用
var name:String?="abc"
var nameLength:Int = 0
nameLength = name?.length?:-1 // 取name的length ,若name為null,則nameLength的值為-1
這樣要比傳統寫法 if(name==null) -1 else name.length 要簡介
2、!!
在一個可空變量使用的時候后面加上!! ,則當該變量為null的時候拋出空指針異常
var name:String?=null
nameLength = name!!.length
此時name為null ,因為使用了!! ,則拋出空指針異常
3、as、as?
類型轉換
當使用as的時候若類型轉換失敗則拋出類型轉換(ClassCastException)異常
當使用as?的時候若類型轉換失敗則返回null,不會拋出異常
var name:String?= 12 as String
可見12 轉換String 類型異常
當使用as?的時候
var name:String?= 12 as? String
Log.i(Tag,"name="+ name)
// 打印日志: name=null
總結:
拋出異常的 !! as 盡量少用,用as? ?. ?: let來代替
原文鏈接:https://cloud.tencent.com/developer/article/1928312
相關推薦
- 2022-03-16 .net?6項目實現壓縮發(fā)布_實用技巧
- 2022-11-22 XML實體注入深入理解_XML示例
- 2022-07-04 Python繪制多因子柱狀圖的實現示例_python
- 2022-06-06 uniApp、uni.chooseLocation(OBJECT)、獲取位置、{errMsg: ‘g
- 2022-10-22 Redis?布隆過濾器命令的使用詳解_Redis
- 2022-04-05 easyswoole轉發(fā)報錯 writev() failed (104 nginx
- 2023-03-28 Python?獲取當前路徑3種方法_python
- 2022-09-03 機器學習數據預處理之獨熱One-Hot編碼及其代碼詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支