我正在使用IntelliJ IDEA的代码检查来评估@Nullable
注释。目前我正在使用org。喷气式飞机。注释
package,但是如果这有助于解决问题,我也可以切换到另一个实现。
问题是带注释变量的无效性检查是用另一种方法完成的。这是代码检查器无法识别的。
java prettyprint-override">@Nullable
private Bar myVar;
public boolean isNotNull() {
// This check is actually more complex, but will
// only ever return true if myVar is not null
return myVar != null;
}
public void foo() {
if (isNotNull()) {
// Here I get a warning that myVar might be null
myVar.bar();
}
}
我能让IntelliJ认识到这种情况吗?
如果您的程序是单线程的,您不应该重写程序来满足IntelliJ的检查。另一个可以验证代码的工具是Nullness Checker。您可以在IntelliJ中运行它。
这里是一个MWE。@EnsuresNonNullif
注释表达了您的规范"这个检查...只有当myVar不为空时才会返回true。"
import org.jetbrains.annotations.Nullable;
import org.checkerframework.checker.nullness.qual.EnsuresNonNullIf;
public class SO57496219 {
private @Nullable Object myVar;
@EnsuresNonNullIf(result = true, expression = "myVar")
public boolean isNotNull() {
return myVar != null;
}
public void foo() {
if (isNotNull()) {
myVar.toString();
}
}
}
如果您的程序是多线程的,您有几种方法。这里有两个。
>
您可以传递-AconcurrentSemantics
命令行选项。仅当您更改程序时,例如将值放入局部变量(如Andy Turner所建议的)时,才会进行验证。但是,如果您希望其他线程同时更改该值,那么您的程序可能应该使用锁。
我怀疑intellij在抱怨,因为它不知道isNotNull()
的返回值指示myVar
的无效性。
但是,在调用bar()
时,它可能为空。
在调用isNotNull()
和使用myVar
之间,其他一些线程可能潜入并将myVar
更改回null。
保证它的唯一方法是:
myVar
到一个局部变量中;localMyVar!=null
和localMyVar.bar()
。我正试图在android中创建一个干净的复选框代码,但如果我只是按下按钮而没有选中复选框,则会出错这是清理复选框的代码: 这是我在重置按钮上输入的代码 该复选框是一个声明: 显然,如果未选中复选框并出现错误,tem.getItemId为null。 注:如果你不知道答案或不明白,最好询问或继续,然后投否决票。让其他有帮助的人看到这个问题
问题内容: 与空检查相比,变量分配是否昂贵?例如,在将foo分配为null之前是否值得检查其是否为null? 还是这无所顾忌? 问题答案: 这是一个微微优化(可能还是由编译器处理)。不用担心 通过专注于程序的实际算法,您将获得更大的回报。 我们应该忘记效率低下的问题,例如大约97%的时间:过早的优化是万恶之源。-唐纳德·努斯
问题内容: 我需要检查value是否定义为任何东西,包括null。将null值视为undefined并返回。以以下为例: 请注意,这是未定义的。 我需要找到满足以下条件的条件: 有任何想法吗? 问题答案: IIRC,您可以使用此功能:
问题内容: 我有一个名为的对象。 它具有几个属性; 我将一个人对象设置为。 1.)我需要检查对象是否不为null;以下表达式正确吗? 2.)我需要知道ID是否包含一个Int。 但是,java不允许这样做。我该如何检查? 问题答案: An 不为null,如果未初始化,则可能为null 。 如果您希望整数可以为null,则需要使用代替。 此外该语句不能为真,因为如果为null,则将抛出a。所以正确的表
如何在Java中检查长值的null? 这样行吗?
我正在用MockMvc做一些测试,我想验证JSON响应的结构。具体地说,我希望确保某个属性的键存在,并且该值是某种类型或NULL。 是否有任何聪明的Hamcrest匹配器可以应用于每个属性的单个json路径?