如何在Kotlin中构成可空的

假设你有2个函数返回为空,你不能编写这2个函数:

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

为了达到这个构图,我写了这个函数:

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

if (y != null)没有明确写入if (y != null)return null是否有可能组合2个可为null的值来获得另一个可为return null

在斯卡拉,我只是做一些事情:

 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) 

我应该使用java可选来实现这一点,或者可能与? 运营商?

谢谢 :)

如果你想从字面上编写两个函数(在FP意义上),那么最好使用函数引用来提高可读性:

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

这是可能的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) } 

对于更多这样的成语,请使用此链接 。