orEmpty 函数
1、基本介绍
- orEmpty 函数是一个用于处理可空对象的扩展函数,当对象为 null 时,它会返回一个对应类型的空实例
- 字符串
String?,当为 null 时返回空字符串"",返回类型为String
@kotlin.internal.InlineOnlypublicinlinefunString?.orEmpty():String=this?:""
- 列表
List<T>?,当为 null 时返回空列表[],返回类型为List<T>
@kotlin.internal.InlineOnlypublicinlinefun<T>List<T>?.orEmpty():List<T>=this?:emptyList()
- 集合
Set<T>?,当为 null 时返回空集合[],返回类型为Set<T>
@kotlin.internal.InlineOnlypublicinlinefun<T>Set<T>?.orEmpty():Set<T>=this?:emptySet()
- 映射
Map<K, V>?,当为 null 时返回空映射{},返回类型为Map<K, V>
@kotlin.internal.InlineOnlypublicinlinefun<K,V>Map<K,V>?.orEmpty():Map<K,V>=this?:emptyMap()
- 数组
Array<T>?,当为 null 时返回空数组[],返回类型为Array<T>
publicactualinlinefun<reifiedT>Array<outT>?.orEmpty():Array<outT>=this?:emptyArray<T>()
2、基本使用
- 字符串
String?
vals:String?=nullprintln(s.orEmpty())println(s.orEmpty().length)
# 输出结果 0
- 列表
List<T>?
vallist:List<Int>?=nullprintln(list.orEmpty())println(list.orEmpty().size)
# 输出结果 [] 0
- 集合
Set<T>?
valset:Set<String>?=nullprintln(set.orEmpty())println(set.orEmpty().size)
# 输出结果 [] 0
- 映射
Map<K, V>?
valmap:Map<Int,String>?=nullprintln(map.orEmpty())println(map.orEmpty().size)
# 输出结果 {} 0
- 数组
Array<T>?
valarr:Array<Int>?=nullprintln(arr.orEmpty().contentToString())println(arr.orEmpty().size)
# 输出结果 [] 0
ifEmpty 函数、ifBlank 函数、takeIf 函数
valhandleContent=if(etHandleContent.text.toString().isEmpty()){null}else{etHandleContent.text.toString()}valhandleContent=if(etHandleContent.text.toString().isBlank()){null}else{etHandleContent.text.toString()}
- 这个 Kotlin 代码在功能上完全等同于 Java 的三元运算符
StringhandleContent=etHandleContent.getText().toString().isEmpty()?null:etHandleContent.getText().toString();StringhandleContent=etHandleContent.getText().toString().isBlank()?null:etHandleContent.getText().toString();
- 代码还可以更简洁,如果为空字符串则返回 null
valhandleContent=etHandleContent.text.toString().ifEmpty{null}valhandleContent=etHandleContent.text.toString().ifBlank{null}
- 也可以使用 takeIf 函数,如果满足条件则返回自身,否则返回 null
val handleContent = etHandleContent.text.toString().takeIf { it.isNotEmpty() } val handleContent = etHandleContent.text.toString().takeIf { it.isNotBlank() }