在Room中创建通用DAO接口时,“参数的类型必须是带有@Entity注释的类”


问题内容

我正在使用Room架构组件进行持久化。我创建了通用的DAO接口以避免样板代码。 Room
Pro提示

但是我的代码没有编译为“错误:(21,19)错误:参数的类型必须是带有@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();

}

我在这里想念什么吗?它在这里这样工作


问题答案:

我最初遵循的是Kotlin中使用的方法,但是这给出了Java代码中的错误。两次快速更改为我解决了

  • 将BaseDao更改为Abstract类
  • 在BaseDao中添加了@Dao批注

请找到下面的代码,现在它可以正常运行

@Dao
abstract class BaseDao<T> {

   @Insert(onConflict = OnConflictStrategy.REPLACE)
   abstract void insert(T entity);

   @Update
   abstract void update(T entity);

   @Delete
   abstract void delete(T entity);
 }

 @Dao
 public abstract class ReasonDao extends BaseDao<Reason>{

    @Query("SELECT * from Reason")
    abstract public List<Reason> getReasons();

  }