RxKotlin flattenAsObservable():类型与方法引用不匹配
RxKotlin flattenAsObservable(): type mismatch with method reference
我正在将一些 Java 代码转换为 Kotlin,我在使用 flattenAsObservable()
时遇到了一些问题
这是 Java 中的代码:
discogsInteractor.search(query)
.map(RootSearchResponse::getSearchResults)
.flattenAsObservable(searchResults -> searchResults)
.take(12)
以下是我目前使用 Kotlin 的内容:
discogsInteractor.search(query)
.map { RootSearchResponse::searchResults }
.flattenAsObservable<SearchResult> { searchResults -> searchResults }
.take(12)
它强调了第二个 searchResults
并给我以下错误:
Required: (Mutable)Iterable<SearchResult!>!
Found: KProperty1<RootSearchResponse, List<SearchResult>>!
我可以代替
.map { RootSearchResponse::searchResults }
和
.map { searchResponse -> searchResponse.searchResults }
它会起作用的。如何正确引用方法?或者在这种情况下我不能的原因是什么?
根搜索响应:
data class RootSearchResponse(val pagination: Pagination,
@SerializedName("results") val searchResults: List<SearchResult>)
RootSearchResponse::searchResults
是方法参考。通过使用 {}
,您没有将此传递给 map
函数,而是传递了一个始终 returns 此方法引用的 lambda。
基本上,您使用 map
操作将每个传入元素映射到该方法引用,而不是像您希望的那样将该方法应用于每个元素。因此,您的 flattenAsObservable
方法的传入参数始终是对 searchResults
方法的相同引用,即 KProperty1
.
要将您引用的方法应用于每个元素,您可以在常规括号中传递方法引用,如下所示:
.map(RootSearchResponse::searchResults)
有关 lambda 所发生情况的其他简单示例:
listOf(1, 2, 3, 4, 5).map { 2 }
此操作会将每个元素映射到 2
,您最终会得到一个仅包含 2
五次的列表。对于以下内容,它基本上只是 shorthand,只是没有明确的参数名称:
listOf(1, 2, 3, 4, 5).map { x -> 2 }
我正在将一些 Java 代码转换为 Kotlin,我在使用 flattenAsObservable()
这是 Java 中的代码:
discogsInteractor.search(query)
.map(RootSearchResponse::getSearchResults)
.flattenAsObservable(searchResults -> searchResults)
.take(12)
以下是我目前使用 Kotlin 的内容:
discogsInteractor.search(query)
.map { RootSearchResponse::searchResults }
.flattenAsObservable<SearchResult> { searchResults -> searchResults }
.take(12)
它强调了第二个 searchResults
并给我以下错误:
Required: (Mutable)Iterable<SearchResult!>!
Found: KProperty1<RootSearchResponse, List<SearchResult>>!
我可以代替
.map { RootSearchResponse::searchResults }
和
.map { searchResponse -> searchResponse.searchResults }
它会起作用的。如何正确引用方法?或者在这种情况下我不能的原因是什么?
根搜索响应:
data class RootSearchResponse(val pagination: Pagination,
@SerializedName("results") val searchResults: List<SearchResult>)
RootSearchResponse::searchResults
是方法参考。通过使用 {}
,您没有将此传递给 map
函数,而是传递了一个始终 returns 此方法引用的 lambda。
基本上,您使用 map
操作将每个传入元素映射到该方法引用,而不是像您希望的那样将该方法应用于每个元素。因此,您的 flattenAsObservable
方法的传入参数始终是对 searchResults
方法的相同引用,即 KProperty1
.
要将您引用的方法应用于每个元素,您可以在常规括号中传递方法引用,如下所示:
.map(RootSearchResponse::searchResults)
有关 lambda 所发生情况的其他简单示例:
listOf(1, 2, 3, 4, 5).map { 2 }
此操作会将每个元素映射到 2
,您最终会得到一个仅包含 2
五次的列表。对于以下内容,它基本上只是 shorthand,只是没有明确的参数名称:
listOf(1, 2, 3, 4, 5).map { x -> 2 }