Java jsf表达式语言(el)类函数生命范围
el语言中使用的静态类的范围是什么 我假设适用范围 我在调试模式下对其进行了测试,并且在多个窗口、浏览器中只初始化了一次lazy-loaded属性Java jsf表达式语言(el)类函数生命范围,java,jsf,scope,el,Java,Jsf,Scope,El,el语言中使用的静态类的范围是什么 我假设适用范围 我在调试模式下对其进行了测试,并且在多个窗口、浏览器中只初始化了一次lazy-loaded属性 private static Object[] objects = null; public static Object[] getObjects() { if(ElClass.objects == null) //init objects return ElClass.objects; } 没有具体的例子。EL函
private static Object[] objects = null;
public static Object[] getObjects()
{
if(ElClass.objects == null)
//init objects
return ElClass.objects;
}
没有具体的例子。EL函数类甚至没有构造。EL函数是完全无状态的。静态变量是按定义的JVM范围(或您所称的应用程序范围)。在普通Java代码中,您也只需执行
ELClass.getObjects()
,而不必执行new-ELClass().getObjects()
对于您的特定示例,我建议只在静态初始值设定项块中进行初始化。这种延迟加载是不必要的
private static final Object[] objects;
static {
// Init objects.
}
public static Object[] getObjects() {
return objects;
}
我还建议添加一个私有构造函数,这样就可以防止函数类被构造
private ELClass() {
// Prevent construction.
}
学了点新东西,不知道那个静态块!没有构造构造函数看起来仍然像一个糟糕的Java设计。但是,如果实用程序类变得很大,并且有很多这种类型的方法,该怎么办呢。在静态块中急切地加载它们可能会增加开销?如果类是无状态的并且只有静态方法,那么私有构造函数的设计肯定不错。IDE和代码样式检查器甚至会在您对实例调用静态方法时发出警告。如果类变大,只需将其拆分为多个类即可。查看ApacheCommons库中的示例。如果在类加载期间只发生一次,那么开销可以忽略不计。