如何继承Kotlin中的密封类?

问题描述 投票:0回答:1

这个问题基于如何在 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

有没有办法真正实现这一点?

kotlin inheritance sealed-class
1个回答
0
投票

您尝试将

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()
}
© www.soinside.com 2019 - 2024. All rights reserved.