我要执行分配时遇到类型不匹配的情况。 所需的值为String,但是我有String?。我的问题是:我应该如何通过toString方法或通过添加非null asserted(!!)调用来处理它。我想知道其中哪个对安全性或性能更好。问题在于关于一种语言的最佳实践。
答案 0 :(得分:2)
你可以这样做
val someString : String = someOtherNullableString ?: ""
如果不为null,将采用someOtherNullbleString的值;如果为null,则将采用“”
答案 1 :(得分:0)
尝试避免使用!!
运算符。当您百分百确定没有null时,应该使用它。总是最好使用 Elvis 运算符(如果左侧的表达式为null,则将评估和分配默认值表达式)
val s1: String? = null
val s2: String = s1 ?: "default value if s1 is null"
答案 2 :(得分:0)
有很多方法。取决于要求
var str1: String? = null
//....
str1.notNull{ //no default value
// your code
str2 = it
}
或者在str1为null的情况下要提供一个值
str2 = str1?:"default_value"
答案 3 :(得分:-1)
我喜欢takeIf方法:
val someString = nullableString.takeIf { it != null } ?: ""
someString将采用nullableString值,除非它为null。如果为空,则将其设置为“”。
我特别喜欢在服务级别上使用此方法,因此使用我的服务的人将永远不需要对待null值。显然,{}之间的逻辑可能比此示例复杂得多。