具有可空/非空输入的Kotlin函数映射到可空/非空输出

时间:2017-06-21 01:50:51

标签: kotlin

我试图想出一种将这两种功能合二为一的方法,

fun parse(string: String): LibObject {
  return SomeJavaLibrary.parse(string)
}

fun parseNullable(string: String?): LibObject? {
    if (string != null) {
        return parse(string)
    } else {
        return null;
    }
}

如果输入可以为空,我希望输出可以为空,否则它是不可为空的。几乎像参数化的可空性。我猜它不可能,但我想问。如果没有,是否有更优雅的选择?

1 个答案:

答案 0 :(得分:6)

  

如果没有,是否有更优雅的选择?

Single expression functions?. safe calls.let之类的标准库功能内置产品都是您的朋友,虽然无法按照您的意愿参数化功能,但可以将代码简化为两行:< / p>

fun parse(string: String): LibObject = SomeJavaLibrary.parse(string)
fun parseNullable(string: String?): LibObject? = string?.let { parse(it) }

编辑:您可以利用泛型类型参数以及可空类型是其非可空对等类型的超类型这一事实,但我没有足够的经验来解决这个问题类型。