如何创建扩展函数ifNullOrEmpty?

Pau*_*sev 6 extension-methods kotlin

我想创建一个类似 Kotlin 的 ifEmpty() 的函数,它也会检查 null:

ifNullOrEmpty{
  //some code if null or empty
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

有谁知道下面的代码叫什么?

: R where C : CharSequence, C : R
Run Code Online (Sandbox Code Playgroud)

Kotlin ifEmpty() 函数的示例。

@SinceKotlin("1.3")
@kotlin.internal.InlineOnly
public inline fun <C, R> C.ifEmpty(defaultValue: () -> R): R where C : CharSequence, C : R =
    if (isEmpty()) defaultValue() else this
Run Code Online (Sandbox Code Playgroud)

感谢,并有一个愉快的一天!

bro*_*oot 3

正如其他答案中所解释的,您不能使用ifNullOrEmpty()与 中类似的通用逻辑进行创建ifNull(),因为您需要@InlineOnly当前是内部的并且只能由 stdlib 使用。

如果您不介意使用内部组件和编写可能不向前兼容的代码,您可以利用一个小技巧:

@Suppress("INVISIBLE_REFERENCE", "INVISIBLE_MEMBER")
@kotlin.internal.InlineOnly
public inline fun <C, R> C.ifNullOrEmpty(defaultValue: () -> R): R where C : CharSequence, C : R =
    if (isNullOrEmpty()) defaultValue() else this
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用@Joffrey 提供的“不太通用”的实现,这对于大多数用例来说应该足够了。