对于我在一个测试类中拥有的以下代码,Sonar抛出了严重的违反情况-正确性-先前取消引用的值的Nullcheck
if (testLst != null && !testLst.isEmpty()) {
for (Test test : testLst) {
if (test.getName().equalsIgnoreCase("TEST")) {
// do blah
}
有人可以就我在这里做错的事情对此有所了解吗?
编辑:这里的答案之一表明这是因为我以前可能已经访问过变量,因此null检查是多余的。不过那不是真的。这是我的空检查之前的代码行。
testLst = myTest.getValues(); //I am basically populating the array by doing a get, but I am not accessing the list itself by doing a get on it directly - like testLst.get()
if (testLst != null && !testLst.isEmpty()) {
for (Test test : testLst) {
if (test.getName().equalsIgnoreCase("TEST")) {
// do blah
}
最佳答案
当您检查变量的值是否为null(在本例中为testLst
),而您之前已经访问过该变量时,将显示此消息。不需要空检查,因为如果该值为空,则将抛出NullPointerException
。
示例:
testLst.remove(something);
if (testLst != null && !testLst.isEmpty()) {
for (Test test : testLst) {
if (test.getName().equalsIgnoreCase("TEST")) {
// do blah
}
check
testLst != null
是多余的,因为在程序到达if
语句时,testLst
不能为null,否则先前的testLst.remove(something)
语句将抛出NullPointerException
。在这种情况下,应在访问testLst
之前将null检查放置在可以为null的位置:if(testLst != null) {
testLst.remove(something);
if (!testLst.isEmpty()) {
for (Test test : testLst) {
if (test.getName().equalsIgnoreCase("TEST")) {
// do blah
}
关于java - 声纳严重违反-先前取消引用的Nullcheck值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26722528/