KotlinSealed Classes Inheritance(Jetpack Compose)[已关闭]

qhhrdooz  于 2023-05-07  发布在  Kotlin
关注(0)|答案(1)|浏览(260)

**关闭。**这个问题是not reproducible or was caused by typos。目前不接受答复。

此问题是由打印错误或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这一个是解决的方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我有一个密封的类,它基本上定义了我的Jetpack Compose应用程序中数据的排序顺序:

sealed class DataOrder(open val sortDirection: SortOrderDirection) {
    class Name(sortOrderDirection: SortOrderDirection) : DataOrder(sortOrderDirection)

    open fun copy(sortOrderDirection: SortOrderDirection): DataOrder {
        return when (this) {
            is Name -> Name(sortOrderDirection)
            is FirearmOrder.NumberOfShots -> FirearmOrder.NumberOfShots(sortOrderDirection)
        }
    }

    companion object {
        fun default(): DataOrder {
            return Name(SortOrderDirection.Ascending)
        }
    }
}

这是一个通用类,我的应用程序中的数据可以使用它进行排序(就像所有数据类型都有一个“Name”属性,所以这就是为什么它在通用DataOrder类中)。
现在我还有一个继承自DataOrder的类,为某些数据类型提供更具体的排序,这些数据类型可能具有其他数据类型所没有的属性:

sealed class FirearmOrder(override val sortDirection: SortOrderDirection) : DataOrder(sortDirection) {
    class NumberOfShots(sortOrderDirection: SortOrderDirection) : FirearmOrder(sortOrderDirection)
}

这对我来说似乎很有意义,但是当我尝试使用这个设置时,我得到一个错误,说“未解析的引用:Name

data class FirearmsState(
    val firearms: List<Firearm> = emptyList(),
    val firearmOrder: DataOrder = FirearmOrder.Name(SortOrderDirection.Ascending) // error on this line
)

我想这个FirearmOrder对象可以访问超类的Name属性,但我猜不行?我还尝试将open放在DataOrder类中class Name定义的前面,但这没有什么区别。
有人能看出我错过了什么吗?谢谢!仅供参考,我最初是根据Philipp Lackner在他的一个教程应用程序中所做的来订购数据的:Philipp Lackner Note App

kknvjkwl

kknvjkwl1#

这一点很明显,但我专注于FirearmOrder类,所以甚至没有意识到它。
感谢@Sweeper,我只需要在FirearmsState类中将FirearmOrder.Name更改为DataOrder.Name。一切似乎都是正确的设置,我只是被愚蠢。

相关问题