我能说的是,
//This value can hold null values
str1: String? = ""
// if str1 not null, store values in str2
// so, now str2 holds NOT NULL VALUES
str2: String = str1
// Now by default since str2 is NOT NULL
// All the values being passed inside str2 will always be NOT NULL
//
str3: String? = str2 // This does not work
str3 只会在 str2 为空的情况下抛出错误,但这是不可能的,因为正如您所说,它会通过空检查。
解决方法看起来像这样。
- 这是一种可能的解决方案,即将 str2 定义为 Nullable 字符串
str1 : String? = ""
str2 : String? = str1
str3 : String? = str2
- 另一种解决方案是,将空检查放在 str2,因为由于 str2 不为空,所以 str3 默认为非空。
str1 : String? = ""
str2 : String = str1 ?: ""
str3 : String = str2
更新
根据更新的问题,
// A list of nulls
var var1: List<String?> = listOf(null, null, null, null, null, null, null, null, null, null)
//Mutable List to hold not null values or filter out null values
var var2: MutableList<String> = mutableListOf()
for (i in var1) var2.add(i ?: "")
//var3 will always be not null
var var3: List<String?> = var2