【发布时间】:2019-07-28 01:38:44
【问题描述】:
我在将这部分 Java 转换为 Kotlin 时遇到问题:
Publishers.map(chain.proceed(request), response -> {
if (request.getCookies().contains("SOME_VALUE")) {
response.cookie(request.getCookies().get(STATE_COOKIENAME).maxAge(0));
}
return response;
});
map 方法的第二个参数(注意Publishers 不是一个集合)采用Function<T,R>。
我尝试了几种解决方案,包括提供一个 lambda:
Publishers.map(chain?.proceed(request), {
x: MutableHttpResponse<*>!,
y: MutableHttpResponse<*>! -> print("It worked")
})
但这会导致:
错误:(32, 38) Kotlin: Unexpected token
错误:(33, 38) Kotlin: Unexpected token
错误:(31, 27) Kotlin: Type inference failed: fun map(publisher: Publisher!, mapper: Function!): Publisher! 不能应用于 (Publisher>!>?,(MutableHttpResponse, MutableHttpResponse) -> 单位)
Error:(31, 56) Kotlin: Type mismatch: inferred type is (MutableHttpResponse>, MutableHttpResponse>) -> Unit but Function>!, MutableHttpResponse?>!预料之中
并提供方法:
return Publishers.map(chain?.proceed(request), ::processCookie)
private fun processCookie(a: MutableHttpResponse<*>?) {
print("something something something")
}
导致:
错误:(31, 27) Kotlin: Type inference failed: fun map(publisher: Publisher!, mapper: Function!): Publisher! 不能应用于 (Publisher>!>?,KFunction1?, Unit>)
Error:(31, 56) Kotlin: Type mismatch: inferred type is KFunction1?, Unit> but Function>!, MutableHttpResponse?>!预料之中
对于上下文,我认为在 kotlin 中尝试 this tutorial 会很有趣。
【问题讨论】:
-
第三种解决方案是将代码保留为 Java。