[英]Kotlin sealed classes assigning property constants
kotlin_version = '1.2.30'
我有一个 sqlite 表,它有一个名为方向的列的整数值。 这将存储基于枚举常量的 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 相比没有任何优势,实际上它比基于enum
的定义更加冗长和容易出错,那么为什么不直接使用它们呢?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.