Избегайте "неинициализированных" ошибок на введенных полях при использовании Checker Framework

Nullness Checker в Checker Framework генерирует ошибку при обнаружении неинициализированного поля.

[ERROR] /home/glts/src/example/src/main/java/BookRepositoryImpl.java:[39,7]
error: [initialization.fields.uninitialized] the constructor does not initialize fields: em

Теперь, это обычная схема, когда некоторые поля вводятся через внедрение зависимостей:

@Repository
public class BookRepositoryImpl implements BookRepository {
    @PersistenceContext 
    private EntityManager em;

    @Override
    @Nullable
    public Book findById(int id) {
        return em.find(Book.class, id);
    }

    // ...
}

Здесь @javax.persistence.PersistenceContext аннотация гарантирует, что em будет содержать ссылку на EntityManager экземпляр после того, как хранилище было построено.

В более общем случае, в этих случаях среда приложения гарантирует, что поля инициализируются и не равны нулю, когда они используются, но Checker Framework не может этого знать.

До сих пор я обнаружил, что одним из способов является преобразование инжекции поля в конструктор (@Inject). Это не вариант в приведенном выше примере.

Есть ли способ сообщить Checker Framework, что поле вводится и, следовательно, правильно инициализируется и не является нулевым, без простого подавления этих ошибок?

1 ответ

Решение

Вы можете подавить ошибку для одного поля, написав @SuppressWarnings("initialization.fields.uninitialized") на поле декларации.

Вы можете подавить ошибку для всех полей, написав @SuppressWarnings("initialization.fields.uninitialized") на уроке.

Существуют структуры внедрения, которые могут вводить нуль как значение, где @PersistenceContext существует аннотация, например, когда XML-файл отсутствует, код не выполняется в транзакции и т. д. @SuppressWarnings("initialization.fields.uninitialized") аннотация - это ваш способ сказать, что вы уверены, что тот, который вы используете, всегда будет вводить ненулевое значение для вашего кода.

Другие вопросы по тегам