Kotlin如果不是空的话

时间:2016-11-04 01:55:01

标签: null kotlin kotlin-null-safety

如果with不是var,那么使用null的最简洁方法是什么?

我能想到的最好的是:

arg?.let { with(it) {

}}

2 个答案:

答案 0 :(得分:18)

您可以使用Kotlin扩展函数apply()run(),具体取决于您是否希望流利在结束时返回this < / em>)或转换在结束时返回新值):

apply的用法:

something?.apply {
    // this is now the non-null arg
} 

流利的例子:

user?.apply {
   name = "Fred"
   age = 31
}?.updateUserInfo()

使用run转换示例:

val companyName = user?.run {
   saveUser()
   fetchUserCompany()
}?.name ?: "unknown company"

或者,如果您不喜欢这种命名并且真的想要一个名为with() 的函数,您可以轻松创建自己的可重用函数

// returning the same value fluently
inline fun <T: Any> T.with(func: T.() -> Unit): T = this.apply(func)
// or returning a new value
inline fun <T: Any, R: Any> T.with(func: T.() -> R): R = this.func()

使用示例:

something?.with {
    // this is now the non-null arg
}

如果要在函数中嵌入null检查,可能是withNotNull函数?

// version returning `this` or `null` fluently
inline fun <T: Any> T?.withNotNull(func: T.() -> Unit): T? = 
    this?.apply(func)
// version returning new value or `null`
inline fun <T: Any, R: Any> T?.withNotNull(thenDo: T.() -> R?): R? =
    this?.thenDo()

使用示例:

something.withNotNull {
    // this is now the non-null arg
}

另见:

答案 1 :(得分:2)

看起来替代方案是使用:

arg?.run {

}