将枚举INSTANCE设为私有

时间:2010-07-04 10:44:41

标签: java singleton enums private

我正在使用这样的enum singletom模式:

public enum LicenseLoader implements ClientLicense {
    INSTANCE;

    /**
     * @return an instance of ClientLicense
     */
    public static ClientLicense getInstance() {
        return (ClientLicense)INSTANCE;
    }

   ...rest of code

}

现在我想返回接口并隐藏我们实际上正在使用枚举的事实。我希望客户端使用getInstance()而不是LicenseLoader.INSTANCE,因为有一天我可能决定在必要时使用不同的模式。

是否可以将INSTANCE设为私有枚举?

2 个答案:

答案 0 :(得分:4)

如果public interfaceprivate enum implements表示接口,单个INSTANCE常量?

所以,就像这样(为了简洁起见,所有这一切都在一个类中):

public class PrivateEnum {

    public interface Worker {
        void doSomething();
    }

    static private enum Elvis implements Worker {
        INSTANCE;
        @Override public void doSomething() {
            System.out.println("Thank you! Thank you very much!");
        }
    }

    public Worker getWorker() {
        return Elvis.INSTANCE;
    }
}

这样,您就不会公开Elvis.INSTANCE(甚至enum Elvis),使用interface来定义您的功能,隐藏所有实现细节。

答案 1 :(得分:1)

可以访问所有enum个常量。例如,通过反序列化或enum特定的反射方法。

一如既往,我强烈建议避免单身。