Я использую базу данных Room версии 1.0.0, и я создал этот 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
//...
}
Я думаю, что проблема может быть в коде Java, в который Котлин переводит, потому что в коде Java все параметры другого метода имеют тип T
, но у сломанного есть List<? extends T>
, поэтому я думаю, что проблема в том, в шаблоне, но я не знаю, как с этим справиться.