这个问题基于如何在 Kotlin 中扩展枚举?.
中的答案我尝试实现这篇文章中的答案之一,但它没有像我预期的那样工作。我希望此类的每个实现都有一组特定于每个实现的枚举(图标图像的位置)。它们都具有相同的几个功能实现,只是不同的字符串和图标。
abstract class Platform(val name: String) {
abstract var icon: Icon
abstract sealed class Icon {
abstract val png: String
}
}
class Twitch : Platform("Twitch") {
override var icon: Icon = Icon.PURPLE
sealed class Icon {
data class PURPLE(val png: String = "drawable.twitch/glitch/01. Twitch Purple/glitch_flat_purple.png") : Icon()
}
}
此实现目前给我错误:
Var-property type is models.Twitch.Icon, which is not a type of overridden public abstract var icon: models.Platform.Icon defined in models.Platform
有没有办法真正实现这一点?
您尝试将
Twitch.Icon
实例放入 Platform.Icon
中,这是两种不同且不相关的类型。那是行不通的。
据我所知,您希望
PURPLE
成为 Platform.Icon
密封层次结构的一部分。在这种情况下,您可以简单地删除 sealed class Icon
中的 Twitch
,这是不需要的。
还有一些其他小错误,例如
override
属性缺少 png
修饰符,以及尝试实例化 PURPLE
时缺少括号。但当所有这些都解决后,最终结果将如下所示:
class Twitch : Platform("Twitch") {
override var icon: Icon = PURPLE()
data class PURPLE(override val png: String = "drawable.twitch/glitch/01. Twitch Purple/glitch_flat_purple.png") : Icon()
}