【发布时间】:2020-04-15 14:19:41
【问题描述】:
我有以下密封类
sealed class DownloadWallpaper : Result() {
data class Progress(val hd: Boolean = false, ...) : DownloadWallpaper()
data class Success(val hd: Boolean = false, ...) : DownloadWallpaper()
data class Error(val hd: Boolean = false, ...) : DownloadWallpaper()
}
我正在尝试执行以下操作。
//obs is of type Observable<Detail.Result.DownloadWallpaper>
obs.map{ it.copy(hd = true) }
但我不能,有两个原因,因为DownloadWallpaper 不是数据类。没有.copy() 方法。如何告诉 Kotlin 这个密封类中的所有类实际上都是data classes?
其次,DownloadWallpaper 它本身没有“hd”字段。我可以使用 when 如何优雅地解决这个问题?
这个解决方案很丑:
when (it) {
is Detail.Result.DownloadWallpaper.Success -> it.copy(hd = true)
is Detail.Result.DownloadWallpaper.Progress -> it.copy(hd = true)
is Detail.Result.DownloadWallpaper.Error -> it.copy(hd = true)
}
【问题讨论】:
-
首先,你不能,
copy是自动生成的:/data classes 不幸的是在继承方面做得不好 -
是的,这就是我所害怕的。我想建议的解决方案还不错,但我会把这个问题留在这里,以防有人提出更好的解决方案
-
如果你把你的解决方案放到
DownloadWallpaper的方法中,那么你可以在任何地方重复使用它
标签: kotlin