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

2022-09-01 12:46:21

我正在使用房间架构组件来实现持久性。我创建了通用的DAO接口来避免样板代码。客房专业提示

但是我的代码在编译时不会说“Error:(21, 19) error: 参数的类型必须是用 @Entity 或它的集合/数组注释的类。

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();

}

我在这里错过了什么吗?它在这里的工作原理是这样的


答案 1

从这个角度更改了:

kapt "androidx.room:room-compiler:$roomVersion"

对此:

annotationProcessor "androidx.room:room-compiler:$room_version"

答案 2

我最初遵循了Kotlin中使用的方法,但这给出了Java代码中的错误。两个快速更改为我修复了它

  • 将 BaseDao 更改为抽象类
  • 在 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();

  }

推荐