2016-06-15 2 views
0

Используя методы Checker Framework, методы, используемые конструктором, могут принимать аннотированные параметры @UnderInitialization.Checker Framework pass @Initialized значение как параметр @UnderInitialization

Вызов такого метода из не-конструктора и передавая ей результаты параметров @Initialized в следующей ошибке:

error: [argument.type.incompatible] incompatible types in argument. 

found : @Initialized <Object> 
required: @UnderInitialization <Object> 

Я не уверен, что это проблема, так как пропускание @Initialized значения не должно имеют больные побочные эффекты.

Каков правильный способ устранения этой ошибки?

ответ

1

Предупреждение о проверке типов выглядит прямо на меня.

Чтобы понять проблему, рассмотрите вопрос о type hierarchy of the initialization type system. @Initialized и @UnderInitialization являются братьями и сестрами в иерархии типов. Не стоит легально поставить @Initialized, если требуется @UnderInitialization, а не List, если требуется Date.

Если метод работает для обоих значений, которые инициализируются и для значений, которые находятся под инициализации, то вы можете аннотировать его параметр как @UnknownInitialization который является супертипом как @Initialized и @UnderInitialization.