正如 Bloch 在Effective Java 2nd Edition的第 3 项(“使用私有构造函数或枚举类型强制单例属性”)中所述,单元素枚举类型是实现单例的最佳方式。不幸的是,旧的私有构造函数模式仍然非常普遍和根深蒂固,以至于许多开发人员在创建枚举单例时不明白我在做什么。
类声明上方的一个简单// Enum Singleton
注释会有所帮助,但它仍然留下了另一个程序员稍后可能会出现并向枚举添加第二个常量的可能性,从而破坏了单例属性。对于私有构造方法存在的所有问题,在我看来,它比枚举单例更具自我记录性。
我认为我需要的是一个注释,它既说明枚举类型是单例,又确保在编译时只有一个常量被添加到枚举中。像这样的东西:
@EnumSingleton // Annotation complains if > 1 enum element on EnumSingleton
public enum EnumSingleton {
INSTANCE;
}
有没有人在任何地方的公共库中遇到过这样的标准 Java 注释?或者在 Java 当前的注解系统下我所要求的是不可能的?
更新
我正在使用的一种解决方法,至少在我决定真正费心滚动自己的注释之前,是直接放在字段@SuppressWarnings("UnusedDeclaration")
前面。INSTANCE
它在使代码看起来与简单的枚举类型不同方面做得不错。