有扩展功能
fun List<Track>.sortByTitle(): List<Track> {
return this.sortedBy { it.title }
}
fun List<Track>.sortByArtist(): List<Track> {
return this.sortedBy { it.artists[0].name }
}
Run Code Online (Sandbox Code Playgroud)
sort为了传递扩展函数,需要在函数的参数中写入什么?
fun sortByTitle(owner: String, kind: String) {
sort(owner, kind) // pass List<Track>.sortByTitle
}
fun sortByArtist(owner: String, kind: String) {
sort(owner, kind) // pass List<Track>.sortByArtist
}
private fun sort(owner: String, kind: String) {
val remote = playlist.get(owner, kind)
val tracks = // call extension function: remote.tracks.sortByTitle()
// ...
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用函数类型传递函数,例如:
fun sortByTitle(owner: String, kind: String) {
sort(owner, kind, List<Track>::sortByTitle)
}
fun sortByArtist(owner: String, kind: String) {
sort(owner, kind, List<Track>::sortByArtist)
}
private fun sort(owner: String, kind: String, sortStrategy: List<Track>.() -> List<Track>) {
val remote = playlist.get(owner, kind)
val tracks = remote.tracks.sortStrategy()
// ...
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中List<Track>.() -> List<Track>意味着:函数是 的扩展List<Track>并返回List<Track>。
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |