Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jsf表达式语言(el)类函数生命范围_Java_Jsf_Scope_El - Fatal编程技术网

Java jsf表达式语言(el)类函数生命范围

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函

el语言中使用的静态类的范围是什么

我假设适用范围

我在调试模式下对其进行了测试,并且在多个窗口、浏览器中只初始化了一次lazy-loaded属性

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库中的示例。如果在类加载期间只发生一次,那么开销可以忽略不计。