【问题标题】:Instantiating and using an enum singleton实例化和使用枚举单例
【发布时间】:2012-01-06 13:30:24
【问题描述】:

假设你有一个枚举单例:

public enum Elvis {
    INSTANCE;

    private int age;

    private Elvis() { age = 42; }

    public int getAge() { return age; }

    public void leaveTheBuilding() { System.out.println("I'm outta here."); }
}

问题:那你如何使用它?是不是这样的:

int a = Elvis.INSTANCE.getAge();
Elvis.INSTANCE.leaveTheBuilding();
// and so on, using Elvis.INSTANCE

还是最好“显式”实例化它,然后使用该实例,如下所示:

Elvis elvis = Elvis.INSTANCE;
int a = elvis.getAge();
elvis.leaveTheBuilding();
// and so on, using elvis

我很想使用后者来避免到处都有丑陋的.INSTANCE 符号。但是这样做有缺点吗? (除了要实例化的额外一行代码。)

【问题讨论】:

    标签: java enums singleton


    【解决方案1】:

    没关系。一个使用局部变量,另一个不使用。使用您认为最易读的内容。

    【讨论】:

      【解决方案2】:

      在我看来,在这种情况下您可以更好地使用静态类:

      public class Elvis {
        private static int age = 42;
      
        private Elvis() {}
      
        public static int getAge() { return age; }
      
        public static void leaveTheBuilding() {
          System.out.println("I'm outta here.");
        }
      }
      

      然后做:

      int a = Elvis.getAge();
      Elvis.leaveTheBuilding();
      // etc.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-24
        • 1970-01-01
        • 2014-12-04
        相关资源
        最近更新 更多