我正在使用Room架构组件来实现持久性 . 我创建了通用DAO接口以避免样板代码 . Room Pro Tips
但是我的代码没有编译说“Error:(21,19)error:参数的类型必须是用@Entity或它的集合/数组注释的类 . ”对于通用类T.
interface BaseDao<T> {
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(T... entity);
@Update
void update(T entity);
@Delete
void delete(T entity);
}
@Dao
public abstract class ReasonDao implements BaseDao<ReasonDao> {
@Query("SELECT * from Reason")
abstract public List<Reason> getReasons();
}
这里有什么我想念的吗?它像这样工作here
4 回答
我最初遵循Kotlin中使用的方法,但是这给出了Java代码中的错误 . 两个快速修改为我修复了它
将BaseDao更改为Abstract类
将@Dao注释添加到BaseDao
请找到下面的代码,现在它运行正常
我相信你错过了给T类
Entity
注释 . 例如Reason
类应该有@Entity
并将其提供给ReasonDao类 . 喜欢:@Dao public abstract class ReasonDao extends BaseDao<Reason>{}
在我的情况下,我试图保存到DB非实体对象 . 然后用Entity类替换(包含
@Entity(tableName = "your_table", indices = [Index("your_key")])
) .原因是您将 ReasonDao 类型指定为通用参数而不是 Reason .
原始代码:
正确的代码:
其中 Reason 是标有 @Entity 注释的类型 .
顺便说一句,这是在接受的答案中修复的,但在更改列表中没有提到:)