Почему у меня нет статических открытых полей в моем управляемом 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.