gpt4 book ai didi

kotlin - Kotlin密封类分配属性常量

转载 作者:行者123 更新时间:2023-12-02 13:38:42 26 4
gpt4 key购买 nike

kotlin_version = '1.2.30'

我有一个sqlite表,该表的Integer值用于名为direction的列。这将基于枚举常量存储Integer属性。

即将 40插入表中:
saveDirection(Direction.Right.code)

我有一个用kotlin编写的枚举类,并分配了属性常量。
 enum class Direction(val code: Int) {
UP(10),
DOWN(20),
LEFT(30),
RIGHT(40),
NONE(0)
}

我想知道我是否可以对密封类做同样的事情
sealed class Direction {
abstract val code: Int

data class Up(override val code: Int): Direction()
data class Down(override val code: Int): Direction()
data class Left(override val code: Int): Direction()
data class Right(override val code: Int): Direction()
data class None(override val code: Int): Direction()
}

但是,这不起作用,因为 saveDirection(direction: Int)期望一个Int值:
saveDirection(Direction.Right(40))

是否可以将常量属性分配给密封类,以便像枚举中那样获取常量属性?

感谢您的任何建议,

最佳答案

您可以使用以下密封类:

sealed class Direction(val code: Int) { 
override fun equals(other: Any?): Boolean = other is Direction && code == other.code
override fun hashCode(): Int = code
}

class Up : Direction(10)
class Down : Direction(20)
class Left : Direction(30)
class Right : Direction(40)
class None : Direction(0)

但是,鉴于问题的上下文有限,目前尚不清楚您将从中确切获得什么。实际上,在这种简单情况下,Kotlin不允许将您的子类标记为 data class:
Data class must have at least one primary constructor parameter

上面提供的解决方案与枚举相比没有任何优势,实际上,它比基于 enum的定义更冗长且更容易出错,那么为什么不使用它们呢?

关于kotlin - Kotlin密封类分配属性常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49350150/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com