Kotlin 指定属性常数的Kotln密封类

Kotlin 指定属性常数的Kotln密封类,kotlin,Kotlin,我有一个sqlite表,它有一个名为direction的列的整数值。它将基于枚举常量存储Integer属性 i、 e将在表格中插入40: kotlin_version = '1.2.30' 我用kotlin编写了一个enum类,并指定了属性常量 saveDirection(Direction.Right.code) 我想知道我是否可以对密封类做同样的事情 enum class Direction(val code: Int) { UP(10), DOWN(2

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

i、 e将在表格中插入
40

kotlin_version = '1.2.30'
我用kotlin编写了一个enum类,并指定了属性常量

saveDirection(Direction.Right.code)
我想知道我是否可以对密封类做同样的事情

 enum class Direction(val code: Int) {
        UP(10),
        DOWN(20),
        LEFT(30),
        RIGHT(40),
        NONE(0)
    }
但是,这不起作用,因为
saveDirection(direction:Int)
需要一个Int值:

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.Right(40))
然而,考虑到问题的有限背景,不清楚你会从中获得什么。事实上,在这个简单的例子中,Kotlin不允许将子类标记为
数据类

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)

上面提供的解决方案与enum相比没有任何优势,事实上它比基于
enum
的定义更详细,更容易出错,所以为什么不直接使用它们呢?

为什么要用密封类替换enum?是的,我想在sqlite表中保存状态。并且希望有一个属性常量与每个状态关联,该状态将是sqlite表中的Int值
Data class must have at least one primary constructor parameter