Room TypeConverter 将多个数据库列转换为一个字段?

use*_*450 7 android android-database android-room

有没有一种方法可以让一个 Room TypeConverter 接受多个表字段并将它们组合成某个对象?

作为示例,假设我有一个表 Foo,其中包含列INT numeratorINT denominator(共同表示分数)和INT unit(单位映射到测量单位的枚举)。我想将它们组合成MyScalar(Fraction(numerator, denominator), unit). 例如,可能取一行(1, 5, 2)(映射2到 的位置MeasurementUnit.KG)并使用 a@TypeConverter将此行转换为MyScalar(Fraction(1,5), MeasurementUnit.KG)

现在我只是在做

data class MyEntity(
    val numerator: Int, 

    val denominator: Int, 

    @TypeConverters(IntAndUnitConverter::class) 
    val unit: MeasurementUnit
) {
    fun combine(): MyScalar {
        return MyScalar(Fraction(numerator, denominator), unit)
    }
}
Run Code Online (Sandbox Code Playgroud)

data class MyScalar(val value: Fraction, val unit: MeasurementUnit)
Run Code Online (Sandbox Code Playgroud)

似乎可以解决这个问题,但我发现这个想法很有吸引力,只需让我的 @Entity 将 @TypeConverters(SomeThreeColumnConverter::class) 放在顶部,而不用担心记住调用 merge() 或类似的东西。

我认为不可能,但想检查一下。