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

mig*_*uel 1 kotlin

我试图想出一种方法将这两个函数合二为一,

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

fun parseNullable(string: String?): LibObject? {
    if (string != null) {
        return parse(string)
    } else {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

F. *_*rge 6

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

单表达式函数,?.安全调用和标准库函数内置,就像.let你的所有朋友一样,虽然不能按你的意愿参数化函数,但可以将代码简化为两行:

fun parse(string: String): LibObject = SomeJavaLibrary.parse(string)
fun parseNullable(string: String?): LibObject? = string?.let { parse(it) }
Run Code Online (Sandbox Code Playgroud)

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