我正在使用1.0.0版的Room数据库,并创建了这个BaseDao:
abstract class BaseDao<in T : BaseDataObject> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(entity: T): Long
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(vararg entity: T): List<Long>
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(entityList: List<T>): List<Long>
@Update
abstract fun update(entity: T): Int
@Update
abstract fun update(vararg entity: T): Int
@Delete
abstract fun delete(entity: T): Int
@Delete
abstract fun delete(vararg entity: T): Int
}
所有这些方法,除了一种方法效果很好,问题是-带有entityList : List<T>
参数的方法导致错误Type of the parameter must be a class annotated with @Entity or a collection/array of it. java.util.List<? extends T> entityList);
。但是我正在从子类中使用此方法,并且我肯定使用@Entity注释了实体类。
子类:
@Dao
abstract class ArticleDAO : BaseDao<Article>() {
}
实体类:
@Entity(tableName = "table_article", foreignKeys = arrayOf(
ForeignKey(
entity = NewsList::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("newsListId")))
)
class Article : BaseDataObject() {
@Embedded(prefix = "source_")
var source: Source? = null
//...
}
我认为问题可能出在Kotlin正在翻译的Java代码中,因为在Java代码中,所有其他方法的参数都具有类型T
,但是损坏的参数具有List<? extends T>
,因此我认为问题出在通配符上,但我不知道如何处理。