Kotlin Android实现DiffUtil时提示Result类需传入一个类型参数报错
报错原因
Kotlin 标准库中默认存在一个泛型类 kotlin.Result<out T>,你自定义的 Result 类和系统类重名,编译器默认优先匹配系统自带的泛型Result类,因此会提示需要传入泛型参数的错误。
之前实现DiffUtil逻辑正常,是因为你之前用的实体类没有和系统内置类重名,没有触发命名冲突。
解决方案
你可以任选以下任意一种方式解决:
- 指定自定义类的全限定名:写DiffUtil的时候直接带上你自定义Result类的完整包名即可,示例如下(把下面的包名替换成你自己的Result类实际包路径):
private val diffCallback = object: DiffUtil.ItemCallback<com.yourpackage.name.Result>() { // 后续实现areItemsTheSame、areContentsTheSame逻辑 }
- 修改自定义类名:把你自定义的Result类改名,比如改成
MovieItem、MediaResult等不会和系统类冲突的名称,后续所有用到该类的地方同步修改即可,这种方式可以彻底避免后续再出现同类命名冲突问题。 - 导入时使用别名:在文件头部导入自定义Result类时指定别名,之后直接用别名引用即可:
// 导入时指定别名,把包名替换为你自己的实际包路径 import com.yourpackage.name.Result as CustomResult // 后续使用时用别名即可 private val diffCallback = object: DiffUtil.ItemCallback<CustomResult>() { // 后续逻辑 }
内容的提问来源于stack exchange,提问作者Dragos Ciupe
相关产品推荐
相关产品推荐

