我正在使用这样的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设为私有枚举?
答案 0 :(得分:4)
如果public interface
和private 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
特定的反射方法。
一如既往,我强烈建议避免单身。