【发布时间】:2018-06-29 13:03:22
【问题描述】:
我正在为我的 Room 数据库编写一个类型转换器。我有几个自定义枚举类,当存储在数据库中时,我想将它们全部转换为其序数。那么,除了为每个类编写以下内容之外,还有什么方法可以简化它(例如传入通用枚举类型)?
class Converter {
@TypeConverter
fun toOrdinal(type: TypeA): Int = type.ordinal
@TypeConverter
fun toTypeA(ordinal: Int): TypeA = TypeA.values().first { it.ordinal == ordinal }
@TypeConverter
fun toOrdinal(type: TypeB): Int = type.ordinal
@TypeConverter
fun toTypeB(ordinal: Int): TypeB = TypeB.values().first { it.ordinal == ordinal }
...
}
【问题讨论】:
-
TypeA和TypeB是 2 个不同的枚举类还是单个枚举的一部分? -
不同的枚举类
-
我猜不可能在一个转换类中为 2 个枚举类创建多个类型转换器。由于您有 2 个
TypeA和TypeB,您应该创建另一个特定于TypeB的转换器。或者,如果两者在结构上相似,您可以使用父interface并使TypeA和TypeB继承该接口并为该接口编写一个转换器,该转换器可以将对象转换为/从对象转换为TypeA和 @ 987654331@ -
我明白了,你介意告诉我如何编写这样的界面吗?假设所有类型的形式为
enum class TypeA(val abbrv: String)
标签: enums kotlin android-room