Android Studio 2020.3.1 P2 LiveData非空lint警告问题问询
问题解决:Android Studio 2020.3.1 LiveData赋值矛盾Lint告警
根因说明
这是该版本Android Studio配套Lint工具的类型推断缺陷:当if分支有多个并列判断条件时,Lint无法正确将content != null的非空校验结果同步到代码块内部,才会出现「要求非空值」和「非空断言多余」的矛盾告警。
可行解决方案(任选其一即可消除所有相关告警)
方案1:使用let作用域函数处理非空逻辑
调整判断结构,用let明确非空作用域,Lint可以正常识别作用域内的变量非空属性:
private fun onDownloadComplete(content: MediaContent?) { if (request.isCropEnabled) { content?.let { safeContent -> _cropRequiredLiveData.value = safeContent return } } // ...原有其他逻辑 }
方案2:提前过滤空值
用Elvis操作符提前做空值返回,后续代码的content会被Lint识别为确定非空:
private fun onDownloadComplete(content: MediaContent?) { // 先过滤空值 content ?: return if (request.isCropEnabled) { _cropRequiredLiveData.value = content return } // ...原有其他逻辑 }
方案3:局部变量中转赋值
不改动原有判断结构的前提下,将content赋值给局部变量,Lint对局部变量的类型推断不会出错:
private fun onDownloadComplete(content: MediaContent?) { if (request.isCropEnabled && content != null ) { val safeContent = content _cropRequiredLiveData.value = safeContent return } // ...原有其他逻辑 }
方案4:注解压制告警(不推荐,仅临时应急用)
给对应行添加压制注解跳过Lint检查:
@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS") _cropRequiredLiveData.value = content
内容的提问来源于stack exchange,提问作者rupinderjeet
相关产品推荐
相关产品推荐

