Статический анализ ловит возможный нулевой указатель, возвращаемый из вызова метода
Используя статический анализ, можно ли предупредить о следующем коде?
public class IntegerConversion {
static int value; // Notice this is an int and not Integer
public static Integer strToInt(String s) {
Integer k;
try {
k= Integer.parseInt(s);
} catch (NumberFormatException e) {
k = null;
}
return k;
}
public static void main(String[] args) {
// possible null pointer here as strToInt can return null
value = strToInt("abc");
}
}
Я использую Spotbugs (преемник findbugs), и он корректно предупреждает о коде, если назначение выполняется в том же методе, как показано ниже.
public class IntegerConversion {
static int value;
public static void strToInt(String s) {
Integer k;
try {
k= Integer.parseInt(s);
} catch (NumberFormatException e) {
k = null;
}
value = k; // spot bugs alert on this line
}
public static void main(String[] args) {
strToInt("abc");
}
}
Является ли недостающее предупреждение в первом фрагменте кода выбором дизайна или техническим ограничением? Существуют ли другие инструменты статического анализа для Java, которые могут поймать эту ошибку?