我在Kotlin中实现了以下枚举
enum class PlaylistAction(val playlistFilter:(Playlist) -> Boolean) {
PLAY ({ it.playListOwner.Id == "xxx" }),
SAVE({true})
}
我想用它过滤像这样的List:
var test = playlists.filter { playlistActionType.playlistFilter}
其中playlistActionType的类型为PlaylistAction
,播放列表为List<Playlist>
但是我收到以下错误:
错误:(122,34)类型不匹配:推断类型是(播放列表) - &gt; (播放列表) - &gt;布尔但是(播放列表) - &gt;布尔是预期的
为何推断类型(播放列表) - &gt; (播放列表) - &gt;布尔而非(播放列表) - &gt;布尔?
答案 0 :(得分:5)
通过将谓词放在{}
中,您实际上是在创建另一个返回谓词的lambda,这就是为什么您最终得到:(Playlist) -> (Playlist) -> Boolean
而不是(Playlist) -> Boolean
。< / p>
使用普通括号应该可以解决问题:
var test = playlists.filter(playlistActionType.playlistFilter)
答案 1 :(得分:0)
var test = playlists.filter(playlistActionType.playlistFilter)
会奏效。您将函数传递给filter
,不需要额外的lambda。