单例枚举与常量

时间:2017-07-17 10:32:48

标签: java enums singleton

我正在尝试使用很少的常量创建枚举。我希望枚举成为单身人士。使用下面的代码,我在eclipse中遇到编译错误:

  

语法错误,插入")"

完成第5行的方法声明。我无法找出错误。

public enum Days {

      SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;

      INSTANCE; // line 5

      public Days getInstance() {
        return INSTANCE;
     }
}

4 个答案:

答案 0 :(得分:5)

在枚举声明中,;在最后一个枚举值之后使用。

所以这里:

SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;  
INSTANCE;

这应该删除:

INSTANCE;
  

我希望枚举成为单身

情况已经如此,但枚举值(SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY)每个都是单身。

枚举类本身不是单身,并不是为它设计的。

而不是试图以这种方式访问​​枚举类:

public Days getInstance() {
  return INSTANCE;
}

仅使用课程:Days

答案 1 :(得分:1)

删除if (entity == null) throw new NullEntityException("null")行,并静态访问您的枚举:INSTANCE

枚举并不意味着实例化,这意味着没有必要尝试让你的枚举成为单身人士。

答案 2 :(得分:1)

您的两个要求不兼容。枚举值是enum类的实例,您需要七个这样的值。根据定义,单例类是具有单个实例的类:

  

Singleton::确保一个类只有一个实例,并提供对其的全局访问点。   -Design Pattern Book - Singleton

因此,从技术上讲,不可能有一个以上的值(也是单例)的枚举类型。

对于大多数使用情况,您可以简单地使用基本的枚举类型定义:

public enum Days 
{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

将Singleton设计模式与枚举类型结合起来的唯一有意义的情况是,当一个人希望使用enum声明来实施Singleton模式时。有关详情,请参见this post。请注意,在这种情况下,枚举中仅存在一个值,该值为INSTANCE

答案 3 :(得分:0)

您不能破坏ENUM varriables的声明,然后再继续。 使用逗号将INSTANCE添加到第3行,您将能够编译该程序。

周日,周一,周二,周三,周四,周五,周六,INSTANCE;