我刚刚开始使用Netbeans 7.1测试版,它正在调用一种我从未见过的错误类型。具体来说:
A managed bean with a public field should not declare any scope other than @Dependent.
它抱怨的字段是public static final
。我可以理解对非静态字段的限制,但我想不出一个好的理由不允许静态字段这样做。不幸的是,我使用了很多,因为我不喜欢在代码中使用常量。
我注意到,即使我在编辑器的空白处得到了红点,maven驱动的构建仍然有效,GlassFish仍然以我期望的方式运行我的应用程序。
那么我对这个问题的结论是什么呢?我是否需要将静态字段移到其他地方,或者是否有其他处理方法?
引用javax.enterprise.inject
包javadocs:
如果一个托管bean有一个公共字段,它的作用域必须是@Dependent。
但我确实同意@BalusC,如果这编译,Netbeans应该报告它为警告(是吗?)。
无论如何,这些常量真的是API的一部分吗?我的意思是,除了在他们自己的班级里,你会在其他地方访问他们吗?如果不是,将可见性降低为private。(如果你只需要从视图中访问常量,你也可以为私有常量创建访问器)。如果是的话,我还是建议你把他们搬到别的地方去。公共字段(静态或非静态)是不可代理的——这就是为什么它们只能是依赖作用域。要解决这个问题,显然可以通过getter方法访问它们。