Kotlin编译报错:Flow<ResponseState<T>>与Flow<ResponseState<List<CoinIcon>>>类型不匹配
问题原因
- 你在
getCoinIcon方法上声明了方法级泛型<T>,这代表该方法返回的ResponseState承载的类型由调用方决定,可以是任意类型。 - 但你代码里实际emit的
Success实例携带的是remoteDataSource.getCoinIcons()返回的固定List<CoinIcon>类型,和泛型声明的「任意类型T」冲突,因此编译器抛出类型不匹配错误。
修复方案
两种可选方案:
方案1:明确返回类型,删除方法泛型
如果这个接口方法固定返回币种图标列表,直接删掉方法的泛型声明,指定明确的返回类型即可,注意父接口CoinRepository中的对应方法也需要同步修改签名:
override fun getCoinIcon(): Flow<ResponseState<List<CoinIcon>>> = flow { emit(ResponseState.Loading) emit(ResponseState.Success(remoteDataSource.getCoinIcons())) }.catch { error -> emit(ResponseState.Error(error.localizedMessage ?: "请求出错")) }
方案2:将泛型提升到接口层面
如果父接口需要统一适配不同返回类型的方法,把泛型声明放到接口类上,实现类指定具体泛型类型:
// 父接口定义 interface CoinRepository<T> { fun getCoinIcon(): Flow<ResponseState<T>> } // 实现类指定泛型为List<CoinIcon> class CoinRepositoryImpl @Inject constructor( private val remoteDataSource: CoinRemoteDataSource ) : CoinRepository<List<CoinIcon>> { override fun getCoinIcon(): Flow<ResponseState<List<CoinIcon>>> = flow { emit(ResponseState.Loading) emit(ResponseState.Success(remoteDataSource.getCoinIcons())) }.catch { error -> emit(ResponseState.Error(error.localizedMessage ?: "请求出错")) } }
内容的提问来源于stack exchange,提问作者Furkan Paşaoğlu
相关产品推荐
相关产品推荐

