Room Persistence生成错误:类型不兼容:无法将List <CAP#1>转换为List <T>,其中CAP#1是新的类型变量

时间:2019-07-05 12:42:09

标签: android generics kotlin android-room kotlinx.serialisation

我试图使用Room Persistence库为List类编写类型转换器,并为序列化使用Kotlinx.Serialization库。

我为Collection Converter创建了一个抽象类。

abstract class BaseCollectionConverter<T> {

    abstract val serializer: KSerializer<T>

    @TypeConverter
    fun toStringCollection(json: String): T {
        return Json.parse(serializer, json)
    }

    @TypeConverter
    fun toCollectionString(list: T): String {
        return Json.stringify(serializer, list)
    }
}

这是抽象类的实现。

class QuestionCollectionConverter : BaseCollectionConverter<List<Survey.Question>>() {

    override val serializer: KSerializer<List<Survey.Question>>
        get() = Survey.Question.serializer().list
}

问题类只是一个带有 @Serializable 批注的数据类。现在,当我尝试构建应用程序时,编译器会发出以下错误。

error: incompatible types: List<CAP#1> cannot be converted to List<Question>
where CAP#1 is a fresh type-variable:
CAP#1 extends Question from capture of ? extends Question

有什么办法可以解决这个问题?

0 个答案:

没有答案