Java 在Android Studio中抑制潜在的NullPointerException
这: 生成警告:Java 在Android Studio中抑制潜在的NullPointerException,java,android,android-studio,intellij-idea,Java,Android,Android Studio,Intellij Idea,这: 生成警告: 数组访问“mItems[position]”可能会产生NullPointerException 我想取消显示此警告(我知道如果mItems为空,则不会调用getItem()) 我已尝试使用以下注释: @SuppressWarnings({“NullableProblems”}) @SuppressWarnings({“null”}) 还有//noinspection符号,但它们都不起作用 使用@SuppressWarnings({“all”})是可行的,但这显然不是我想
数组访问“mItems[position]”可能会产生NullPointerException
我想取消显示此警告(我知道如果mItems
为空,则不会调用getItem()
)
我已尝试使用以下注释:
@SuppressWarnings({“NullableProblems”})
@SuppressWarnings({“null”})
//noinspection
符号,但它们都不起作用
使用@SuppressWarnings({“all”})
是可行的,但这显然不是我想要的
当我按下alt+enter键时,Android Studio不提供任何抑制选项,只提供添加(无用)空检查的选项。对我来说
@SuppressWarnings
不起作用。我只是在警告之前添加assert
语句,使其消失
您的代码应该如下所示:
@Nullable
Item[] mItems;
public Item getItem(int position) {
return mItems[position];
}
我知道您说过,如果mItems
为null
,您肯定不会调用getItem()
。但是,检查器不会考虑您在调用函数之前已经进行了检查,因此会发出警告
或者您可以将其保留,因为
mItems=null
永远不会发生。但是您的代码看起来有点凌乱,对我来说很烦人。这对我来说很有效,但不确定AS为什么要使用常量条件作为抑制器。我认为这与跳过null检查有关,因为它是一个常量条件(即,它总是不为null)
如果您想防止Android Studio在将这些警告保留在编译器中的同时用这些警告打扰您,只需转到设置->编辑器->检查->常量条件和异常并取消选中即可 如果您想完全删除它,请按照其他答案的建议使用适当的SuppressWarnings:
@Nullable
Item[] mItems;
@SuppressWarnings("ConstantConditions")
public Item getItem(int position) {
return mItems[position];
}
@SuppressWarnings(“ConstantConditions”)帮了我的忙。为了在Mac上直观地演示 转到
首选项->编辑器->检查
然后在搜索框中键入恒定条件
然后取消选中下图所示的选项:
请不要删除并重新发布;使用“编辑”按钮为您的问题添加其他上下文。@dimo414以前的发布是一个意外事件(我在添加标记时按了enter键,它发布了它),该问题尚未准备好。后来我试着编辑它,但不可能。这是一个优雅的解决方案。您可以添加一个说明,说明assert的作用和使用时间。文档中的快速引用:断言是包含布尔表达式的断言语句。断言被启用或禁用。如果启用了断言,则执行断言会导致对布尔表达式求值,如果表达式求值为false,则会报告错误。如果断言被禁用,那么断言的执行将毫无效果。“测试的编码标准与生产代码不同。如果我挂起一个引用,我希望我的测试爆炸,没有多余的断言。我如何在测试文件中抑制这个警告?不知道哪一个更糟,添加一堆不必要的断言,或者用误导性的术语抑制警告。叹气。归咎于谷歌。这会d在项目中的任何地方禁用它,这可能有用,但与所问的不同。是的,你是对的,我没有完全阅读问题就回答了。然后,下次我运行检查时,我得到了“冗余抑制”,因此我处于无限循环中
@Nullable
Item[] mItems;
@SuppressWarnings("ConstantConditions")
public Item getItem(int position) {
return mItems[position];
}
@SuppressWarnings("ConstantConditions")