Room DAO实现类方法冲突求助:泛型擦除致重写失败
解决Room DAO中suspend方法的泛型重写冲突问题
针对你遇到的三类错误:NoteDao_Impl需实现抽象方法、@Override注解不生效、泛型擦除后签名冲突,给你几个实用解决办法:
统一Room依赖版本
先检查项目中Room相关依赖(room-runtime、room-compiler、room-ktx)的版本是否完全一致,Gradle配置里别出现版本不匹配的情况。Room版本不一致很容易导致suspend方法的生成代码出现异常。清理构建缓存并重建项目
旧构建缓存大概率是问题根源。直接在Android Studio中点击Build -> Clean Project,完成后再点击Build -> Rebuild Project。如果还是不行,手动删除项目根目录下的.gradle文件夹和模块内的build文件夹,之后重新同步项目。检查Notes实体类
确认Notes类是标准的Room实体类,是否添加了@Entity注解,类本身是不是泛型类?如果Notes是泛型类,会导致Room生成的方法签名混乱,引发泛型冲突。核对Kotlin与Room版本兼容性
Kotlin和Room版本必须匹配,比如Room 2.5.x需要搭配Kotlin 1.8.x及以上版本,版本不兼容会导致编译生成的suspend方法参数签名出错。可以根据官方兼容要求调整到合适的版本组合。
如果以上方法都无效,可尝试将DAO中getAllNotes的返回值从List<Notes>改为List<out Notes>,不过这属于临时适配方案,优先解决依赖和缓存问题更稳妥。
内容的提问来源于stack exchange,提问作者Ahmet Kaan
相关产品推荐
相关产品推荐

