kotlin:函数引用中的可空性错误推论?

时间:2018-04-05 23:16:39

标签: kotlin type-inference

我想为可空字符串选择验证函数:

val aString: String? = ...
val validation
       //  : KFunction1<CharSequence?, Boolean>
           = if (...) Objects::isNull else StringUtils::isNotBlank

isNotBlank来自apache commons。它需要字符串并返回bool。

当我取消注释显式类型声明时,一切都很好。但是当没有声明显式类型时,它会推断出KFunction1<CharSequence, Boolean>所以参数不能为空。为什么呢?

1 个答案:

答案 0 :(得分:0)

  

这是预期的行为。 ::左侧的类型实际上是您要作为第一个参数传递给引用的实例的类型,因此类型推断将其用作KFunction1的第一个参数。

     

如果您希望可以在StringUtils?个对象上调用引用,请使用StringUtils?::isNotBlank,但StringUtils::isNotBlank引用只接受非空StringUtils个对象。< / p>

Reference