【问题标题】:Java lazy loading of enum instances枚举实例的Java延迟加载
【发布时间】:2012-02-23 17:13:28
【问题描述】:

如果我在一个枚举类型中有一堆枚举实例,并且如果我第一次访问它的一个实例,那么它的所有剩余实例也会同时初始化。有没有办法只在第一次访问枚举实例时才初始化它?

【问题讨论】:

  • 你为什么想要那个?
  • 我没有具体的用例,但想知道 - 如果创建一个枚举实例很昂贵(比如说它从每个实例创建的数据库中读取一些东西),那么它可能更有意义仅在请求时创建实例。
  • 我有一个非常具体的案例。如果将在计算机视觉项目中搜索的图像对象,我需要存储枚举。它们可能会被多次搜索,但我不想将它们与应用程序一起初始化。

标签: java enums lazy-loading


【解决方案1】:

基本上不再是enumEnums are classes。第一次使用一个类时,它被 JVM 加载,并且所有的静态初始化都完成了。设置枚举成员是一个静态初始化,所以它们都会被初始化。

【讨论】:

    【解决方案2】:

    您可以使实例在使用时延迟加载。即构造函数实际上并没有执行昂贵的工作。在这些枚举的方法中,您向需要此方法的方法添加了一个检查加载()方法。这不一定是每种方法,具体取决于它的作用。

    【讨论】:

    • 有趣的想法,尽管开发人员必须考虑线程安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2017-01-09
    相关资源
    最近更新 更多