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

我试图找出一种方法将这两个功能合并为一个,

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

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

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

单表达式函数 , ?. 安全调用和像.let这样的标准库函数内部函数都是你的朋友,虽然不能像你所希望的那样对函数进行参数化,但是可以将代码放在两行:

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

编辑 :您可能能够利用泛型类型参数和可空类型是不可空对象的超类型的事实,但我没有足够的经验来解决跨多种类型。