【问题标题】:jsf expression language (el) classes function life scopejsf表达式语言(el)类函数生命范围
【发布时间】:2012-05-07 18:14:02
【问题描述】:

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

我假设应用范围?

我在调试模式下对其进行了测试,延迟加载属性仅在多个窗口、浏览器中初始化一次。

private static Object[] objects = null;

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

【问题讨论】:

    标签: java jsf scope el


    【解决方案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.
    }
    

    【讨论】:

    • 学到了一些新东西,不知道那个静态块!没有构造 Constructor 看起来仍然像一个糟糕的 Java 设计。但是如果实用程序类变得很大并且有很多这种类型的方法怎么办。在该静态块中急切地加载所有这些可能是开销?
    • 如果类是无状态的并且只有静态方法,那么私有构造函数绝对是不错的设计。 IDE 和代码样式检查器甚至会在您调用实例上的静态方法时发出警告。如果班级变大,只需分成多个班级。在 Apache Commons 库中查找示例。如果在类加载期间只发生一次,开销可以忽略不计。
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-05-06
    • 2017-07-18
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多