Почему у меня нет статических открытых полей в моем управляемом beans?
Я только начал использовать бета-версию Netbeans 7.1, и он вызывает ошибки типа, которого я никогда раньше не видел. В частности:
A managed bean with a public field should not declare any scope other than @Dependent.
Поля, на которые он жалуется, public static final
. Я могу понять ограничение на нестатические поля, но я не могу придумать, почему это не допустимо для статического поля. К сожалению, я использую многие из них, так как мне не нравятся константы в моем коде.
Я отмечаю, что, хотя я получаю красную точку в поле в редакторе, сборка, управляемая maven, все еще работает, и GlassFish по-прежнему запускает мое приложение так, как я ожидал.
Итак, что же такое моя развязка по этой проблеме? Должен ли я перемещать свои статические поля в другом месте или есть другой способ справиться с этим?
Ответы
Ответ 1
Обозначение javax.enterprise.inject
пакет javadocs:
Если управляемый bean имеет общедоступное поле, он должен иметь область @Dependent.
Но я согласен с @BalusC, что если это компилируется, Netbeans должен сообщать об этом как о предупреждении (не так ли?).
В любом случае, являются ли эти константы частью API? Я имею в виду, вы обращаетесь к ним где-нибудь еще, кроме своих классов? Если нет, уменьшите видимость до частного. (Если вам просто нужно получить доступ к константам из представления, вы также можете создать аксессоры для частной константы). Если да, я бы предложил вам переместить их в другое место.
Ответ 2
Публичные поля (статические или нет) не являются проксимируемыми - поэтому они могут быть зависимы только от ограничений. Чтобы обойти это, вы, очевидно, можете получить к ним доступ через методы getter.