@ Не полные поля в методе 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 тоже дружелюбны.