@ Не полные поля в методе init

Есть ли способ заставить Eclipse понять, что поля @Nonnull были инициализированы в некотором методе инициализации. Я ищу что-то вроде @EnsuresNonNull({"bar"}) в иначе непригодной для использования Checker Framework.

Пример:

import javax.annotation.Nonnull;
public class Foo{
    @Nonnull String foo;
    public Foo(){
        init();
    }
    //need something like @EnsuresNonNull({"foo"});
    public void init(){
        foo="foo";
    }
}

Получение следующей ошибки:

The @Nonnull field foo may not have been initialized

1 ответ

Решение

Насколько мне известно, в настоящее время Eclipse не имеет такой возможности. Вы можете увидеть его документацию для списка поддерживаемых аннотаций.

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

Разработчики Eclipse постоянно работают над улучшением своего инструмента, и они дружелюбны. Поэтому я уверен, что они будут рады вашим предложениям или исправлениям.

Облом, что Checker Framework не сработал для вас. Ваш опыт не типичен: Google запускает Checker Framework для сотен проектов каждый день, и есть множество других успешных примеров. Вы всегда можете отправить сообщение об ошибке; разработчики Checker Framework тоже дружелюбны.

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