JJD*_*JJD 6 android kotlin android-room
我试图在基本接口中定义常见的CRUD方法,如下所示:
interface BaseDao<in I> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun create(obj: I)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun createAll(objects: List<I>)
@Delete
fun delete(obj: I)
}
Run Code Online (Sandbox Code Playgroud)
Room的以下ProductDao接口继承自基接口:
@Dao
interface ProductDao : BaseDao<Product> {
// Specific methods
}
Run Code Online (Sandbox Code Playgroud)
当我编译定义时fun createAll(objects: List<I>)产生以下错误:
参数的类型必须是使用@Entity或其集合/数组注释的类.
我已经通过以下方式解决了问题:
@Dao
interface BaseDao<T> {
/**
* Insert a list in the database. If the item already exists, replace it.
*
* @param list the items to be inserted.
*/
@Insert(onConflict = OnConflictStrategy.REPLACE)
@JvmSuppressWildcards
abstract fun insertAll(list: List<T>)
}
Run Code Online (Sandbox Code Playgroud)
@JvmSuppressWildcards 帮我解决了这个问题
尝试添加@JvmSuppressWildcards到您的功能.
@Insert
@JvmSuppressWildcards
fun createAll(objects: List<I>)
Run Code Online (Sandbox Code Playgroud)
来自文档:
指示编译器为与声明 - 站点差异的参数对应的类型参数生成或省略通配符,例如Collection has.
只有声明似乎不方便从Java使用它可能会有所帮助.
您应该@Entity为您的模型类添加注释(您应该为 Dao 方法提供具体的模型类),但您在接口中使用泛型BaseDao<in I>。
https://developer.android.com/training/data-storage/room/defining-data.html
| 归档时间: |
|
| 查看次数: |
6712 次 |
| 最近记录: |