枚举和单身人士

时间:2013-11-11 04:28:15

标签: java enums singleton

考虑以下实现

public enum Singleton {

    INSTANCE;
    private final OnlyOne onlyOne;

    Singleton() {
        onlyOne = new OnlyOne();
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public static void main(String[] args) {

        Singleton one = getInstance();
        one.onlyOne.method();
    }

}

class OnlyOne {

    public void method() {
        System.out.println("Hello World");
    }
}

这里我尝试使用enum实现Singleton。我希望OnlyOne只有一个实例。我的问题是如何限制客户端实例化类OnlyOne的对象?因为在其他一些课程中我们可以很容易地做到这一点

OnlyOne  one = new OnlyOne();

我无法为它提供私有构造函数,因为这样做会破坏这个

Singleton() {
  onlyOne = new OnlyOne();
}

我是否需要将枚举用作OnlyOne类的内部成员?有什么建议吗?

1 个答案:

答案 0 :(得分:3)

INSTANCE本身就是单身人士。将您的方法直接添加到枚举。

public static void main(String[] args) {
    Singleton.INSTANCE.method();
}

public enum Singleton {
    INSTANCE;
    public void method() {
        System.out.println(this);
    }
}