У меня есть класс с функцией hasField
, которая проверяет, присутствует ли поле и не является ли оно пустым, и функцией getField
, которая возвращает значение поля (или ноль, если ее нет).
В моем коде, когда я вызываю getField
сразу после проверки hasField
, я знаю, что getField не будет возвращать ноль, но проверка IDE ( Постоянные условия и исключения ) этого не знает. Я получаю набор методов method name
, которые могут выдать NullPointerException
Я пытаюсь найти чистый способ убрать это предупреждение go.
Обходные пути
Вот некоторые обходные пути, которые я мог бы сделать, но я нахожу все эти хакеры:
- Surround
getField
с Objects.requireNotnull
, код будет недоступен. Я бы предпочел не делать этого, поскольку это делает код немного менее читабельным. - Подавляет предупреждения, если я знаю, что это безопасно. Опять же, не является предпочтительным, поскольку это произойдет в нескольких местах нашего кода.
- Игнорировать предупреждения. В этом случае мы можем пропустить le git предупреждений только потому, что раздел предупреждений будет слишком шумным.
Идеальное решение
Смогу ли я каким-то образом установить составить предупреждение таким образом, что если hasField
истинно, то getField
вернет ненулевое значение? Я изучил Комментарии к контракту JetBrains , но выполнение того, что я хочу, похоже, выходит за рамки того, что поддерживается @ Contract
Пример кода
Вот Пример минимального рабочего кода, который демонстрирует проблему:
import javax.annotation.Nullable;
public class Hello {
private Hello(){}
public static void main(String[] args) {
TestClass test1 = new TestClass(null);
if (test1.hasSample()) {
System.out.println(test1.getSample().equals("abc"));
}
}
}
class TestClass {
private final String sample;
TestClass(String field) { this.sample = field; }
boolean hasSample() { return sample != null; }
@Nullable public String getSample() { return sample; }
}
Я получаю следующее предупреждение
Вызов метода equals
может привести к NullPointerException
В идеале я бы хотел сказать IDE, что getSample не равно NULL, когда hasSample равно true.