Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Studio抱怨即使在检查之后表达式仍然为空_Android_Android Studio_Null_Warnings - Fatal编程技术网

Android Studio抱怨即使在检查之后表达式仍然为空

Android Studio抱怨即使在检查之后表达式仍然为空,android,android-studio,null,warnings,Android,Android Studio,Null,Warnings,在我的片段的onCreateView()方法中有以下代码行。它警告我,createPinPresenter.setLoginResult()的表达式可以是null 所以我要求AS生成null检查,它就是这样做的 即使在自动生成代码之后,AS仍然抱怨相同的表达式为null。它显然不能在检查内为null 我是否遗漏了一些明显的东西,或者这是一个bug 编辑:我使用的是AS版本2.2.3这是正确的,例如,如何知道getParcelable()是否会返回相同的值?它只是一个语法控制,而不是语义控制。

在我的
片段的
onCreateView()
方法中有以下代码行。它警告我,
createPinPresenter.setLoginResult()
的表达式可以是
null

所以我要求AS生成
null
检查,它就是这样做的

即使在自动生成代码之后,AS仍然抱怨相同的表达式为
null
。它显然不能在检查内为
null

我是否遗漏了一些明显的东西,或者这是一个bug


编辑:我使用的是AS版本2.2.3这是正确的,例如,如何知道getParcelable()是否会返回相同的值?它只是一个语法控制,而不是语义控制。 例如,如果函数被调用的次数是奇数,则函数可能返回null,在这种情况下,警告是正确的

你可以这样想:

if (getNextValue() != null)
   value = getNextValue();
如果
getNextValue()
增加一个索引,那么在数组的末尾它可能返回
null
:错误非常明显,实际上控件试图在代码中阻止它

唯一的解决方案是将
getParcelable(KEY\u LOGIN\u result)
的结果存储在一个临时变量中,这样可以正确地管理它


当然。。。事实上,这是一个自动生成的代码,实际上是一个bug,我认为,这是一个自动生成的bug,没有控件那么聪明。

更可能不是bug,只是一些不够聪明的东西,无法读取上面的代码并看到空值检查。看一个函数是否可以返回null是很简单的,很难分析代码,也很难看它是否真的被选中了。@Gabeschen但我已经看到,一旦适当的检查完成,就会发出警告(可能不是null)。这不也应该这样吗?例如,它要求转换
断言表达式!=null
to
if(BuildConfig.DEBUG&&expression){throw new AssertionError();}
即使这比您期望它做的要简单-您不是在寻找它来解析整个函数和分析上下文,而是在寻找一条简单的单行规则-如果调用assert(blah),转换为if(BuildConfig.DEBUG)blah。你想要的更多的是一个功能要求,而不是一个bug。是的,我同意自动生成是一个bug。我在“让我们看看开发人员要说什么”上提出了一个问题。我什么都不相信。创建局部变量并非易事,而是代码中可能出现错误的另一个原因。在执行“提取变量”重构时创建变量也是如此。这些变量的作用域也是唯一的,但在这种情况下,您需要明确地请求创建新的变量。无论如何,我不知道:)