如何在Kotlin中构成nullables

Loi*_*oic 3 nullable kotlin

让我们假设你有两个可以归零的功能,你不能编写这两个函数:

fun giveInt(x: Int):Int? = x+1
fun giveInt2(x: Int):Int? = x+2
Run Code Online (Sandbox Code Playgroud)

为了实现这个组合,我写了这个函数:

fun all(x:Int):Int? {
  val y = giveInt(x)
  if (y != null) return giveInt2(y) else return null;
}

val four = all(1)
Run Code Online (Sandbox Code Playgroud)

是否有可能构成2个空的值来获得另一个为空的没有明确的写作if (y != null)return null

在Scala我会做的事情如下:

def giveInt(x: Int):Option[Int] = Some(x+1)
def giveInt2(x: Int):Option[Int] = Some(x+2)
def all(x:Int): Option[Int] = giveInt(x).flatMap(giveInt2)
Run Code Online (Sandbox Code Playgroud)

我应该使用java Optional来实现这一点,还是可以使用?运算符?

谢谢 :)

erk*_*gur 6

可以使用这样的safe call ?.运算符和let函数组合:

fun giveInt(x: Int):Int? = x+1
fun giveInt2(x: Int):Int? = x+2

fun all(x: Int): Int? = giveInt(x)?.let { giveInt2(it) }
Run Code Online (Sandbox Code Playgroud)

对于更多这样的习语,请使用此链接.