Kotlin中使用Hilt注入泛型接口报错,求助解决
解决Hilt注入泛型接口时的"参数类型必须可赋值给返回类型"错误
问题原因
你遇到的错误核心是**UserRepositoryImpl没有实现UserRepository接口**:
虽然UserRepositoryImpl继承的LocalDataImpl<UserEntity>实现了LocalDataRepository<UserEntity>,且UserRepository是LocalDataRepository<UserEntity>的子接口,但Kotlin中类不会自动继承父类所实现接口的子接口,因此UserRepositoryImpl和UserRepository之间没有直接的类型兼容关系,导致Hilt的@Binds方法无法完成绑定。
解决方案
修改UserRepositoryImpl的定义,让它直接实现UserRepository接口:
class UserRepositoryImpl @Inject constructor( private val userDao: UserDao ) : LocalDataImpl<UserEntity>(userDao), UserRepository { // 无需额外实现方法,LocalDataImpl已覆盖所有LocalDataRepository的抽象方法 }
修改后,UserRepositoryImpl同时成为LocalDataImpl<UserEntity>的子类和UserRepository的实现类,Hilt的@Binds方法就能正确识别类型匹配关系,解决类型不匹配的错误。
额外验证点
- 确保
UserDao已通过Hilt正确提供(比如使用@Inject构造函数,或在Hilt模块中绑定) - 确认
BaseDao<T>和BaseEntity的定义无问题,保证LocalDataImpl能正确实现LocalDataRepository的所有方法
内容的提问来源于stack exchange,提问作者Didier Vera
相关产品推荐
相关产品推荐

