Failsafe withFallback():为什么kotlin编译器无法推断lambda类型



我的kotlin代码中有以下内容:

return Failsafe.with<Boolean>(retryPolicy)
// Here I want fall back to false
.withFallback { -> false} // Does not work
.get { ->
publish(event)
true
}

Kotlin编译器抱怨:

错误:(89,14(Kotlin:过载分辨率模糊度:

公共最终乐趣与回退(p0:(((->布尔!(!(:SyncFailsafe!在net.jodah.failsafe.SyncFailsafe 中定义

公众最终乐趣与Fallback(p0:(((->单位(!(:SyncFailsafe!在net.jodah.failsafe.SyncFailsafe 中定义

但它的工作方式是:

val fallback: () -> Boolean = { false }
return Failsafe.with<Boolean>(retryPolicy)
// Here I want fall back to false
.withFallback(fallback) // Works
.get { ->
publish(event)
true
}

有人能解释一下为什么它不适用于括号外的lambda文字吗?如何使它与lambda内联一起工作?

如果您编写

val fallback: () -> Unit = { -> false }

您将看到它也在编译(它只是丢弃结果(。因此,{ -> false}可以用于类型() -> Boolean() -> Unit,编译器不知道您想要哪个。

因此,要使用lambda,请在那里指定所需的类型:

.withFallback({ -> false} as () -> Boolean)

或者创建一个没有过载的扩展功能,例如:

fun <T, F> FailsafeConfig<T, F>.withFallbackT(fallback: () -> T) = withFallback(fallback)
return Failsafe.with<Boolean>(retryPolicy)
.withFallbackT { -> false}...

最新更新