实例化和使用枚举单例

时间:2012-01-06 13:30:25

标签: java enums singleton

假设你有一个枚举单身人士:

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符号。但这样做有缺点吗? (除了要实例化的一行额外代码之外。)

2 个答案:

答案 0 :(得分:4)

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

答案 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.