Swift在其核心库中具有枚举类型Optional
,这意味着您可以查看一些代码来了解Swift如何处理可选内容(例如??
运算符),甚至可以在其中添加自己的扩展名。
Kotlin的基础库中是否有类似的类型?还是所有Kotlin的可为空类型都在语言/语法/编译器级别处理?我已经阅读了the very spartan Null Safety section of the Kotlin manual,但没有找到任何有关特定的null包装器类型的提示。
答案 0 :(得分:3)
后缀?
与Swift的Optional
等效,不同的是它不是Swift中的枚举,因为它不是一流的值,它返回到JVM的原始null
代替。
您可以在可为null的类型上添加扩展名,例如:
fun <T> Collection<T>?.isNullOrEmpty(): Boolean {
return this == null || isEmpty()
}
它与Swift不太一样,因为您需要选择一个基类(例如Collection<T>
),但是功能相似。
您还可以在Kotlin中访问Java 8的java.util.Optional<T>
,但这只是一团糟,最好避免。
答案 1 :(得分:0)
默认情况下,Kotlin数据类型不可为空。您可以通过添加问号来创建可为空的数据类型:
var a: String = "Hello!" // non-nullable
var b: String? = null // nullable
从不可为空的值到可为空的类型的转换是自动的。还有类似Swift的null传播语法。
答案 2 :(得分:0)
不,kotlin中没有内置功能,但是我们可以使用inline fun
inline fun <T:Any?> T?.unwrap(callback: (T)-> Unit) : Boolean {
return if (this != null) {
this?.let(callback)
true
}else {
false
}
}
用途:
val name : String? = null
val rollNo : String? = ""
var namesList: ArrayList<String>? = null
if (name.unwrap { name ->
Log.i("Dhiru", "Name have value on it $name")
})else if ( rollNo.unwrap {
Log.i("Dhiru","Roll have value on it")
}) else if (namesList.unwrap { namesList ->
Log.i("Dhiru","This is Called when names list have value ")
}) {
Log.i("Dhiru","No Field have value on it ")
}