2012-04-27 111 views
0

el语言中使用的静态类的范围是什么?jsf表达式语言(el)类函数生活范围

我假设应用范围?

我在调试模式下测试它,并且懒加载属性只在多个窗口浏览器中初始化一次。

private static Object[] objects = null; 

public static Object[] getObjects() 
{ 
    if(ElClass.objects == null) 
     //init objects 
    return ElClass.objects; 
} 

回答

1

有一个具体的实例的手段。 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. 
} 
+0

学到了一些新东西,不知道那静态块!没有构造函数看起来像一个糟糕的Java设计。但是如果实用程序类变得庞大并且有很多这种类型的方法会怎么样。在静态块中急切地加载它们可能是开销? – djmj 2012-04-27 01:17:09

+0

私人构造函数绝对不是坏设计,如果该类是无状态的并且只有静态方法。每当您调用实例的静态方法时,IDE和代码风格检查器甚至会警告您。如果这个类变得很大,只需分割多个类。在Apache Commons库中查找示例。如果在班上课时只发生一次,则开销可以忽略不计。 – BalusC 2012-04-27 02:27:29