Java枚举单例的注释

And*_*ell 8 java singleton enums annotations

正如布洛赫在第3项规定("强制使用私有构造函数或枚举类型的单身财产")的有效的Java第二版,单元素枚举类型是实现一个单身的最佳途径.不幸的是,旧的私有构造函数模式仍然非常普遍和根深蒂固,以至于许多开发人员在创建枚举单例时并不理解我在做什么.

// Enum Singleton类声明之上的简单注释有所帮助,但它仍然留下了另一个程序员可以稍后出现并向枚举添加第二个常量,打破单例属性的可能性.对于私有构造函数方法所具有的所有问题,在我看来,它比枚举单例更自我记录.

我认为我需要的是一个注释,它既声明枚举类型是单例,并且在编译时确保只有一个常量被添加到枚举中.像这样的东西:

@EnumSingleton // Annotation complains if > 1 enum element on EnumSingleton
public enum EnumSingleton {
   INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)

有没有人在任何地方的公共图书馆中为标准Java运行这样的注释?或者是我在Java当前的注释系统中要求不可能的东西?

UPDATE

我正在使用的一种解决方法,至少在我决定真正打扰我自己的注释之前,就是@SuppressWarnings("UnusedDeclaration")直接放在INSTANCE场地前面.它使得代码看起来与简单的枚举类型截然不同.

dce*_*chi 2

我不知道公共 java 库中有这样的注释,但您可以自己定义这样的编译时注释以用于您的项目。当然,您需要为其编写一个注释处理器,并以某种方式调用APT(使用antmaven)以在编译时检查@EnumSingleton注释枚举的预期结构。

这是有关如何编写和使用编译时注释的资源。