枚举

枚举几乎是所有编程语言都支持的类型,是Java诞生十多年后才追加的数据类型。

1. 多例设计模式与枚举

构造方法私有化;类内部提供若干个实例化对象,并通过static方法返回。

class Color{
  private static final Color RED = new Color("Red");
  private static final Color GREEN= new Color("Green");
  private String title;

  private Color(String title){
    this.title = title;
  }

  public static Color getInstance(int ch){
    switch(ch){
      case 0: return RED;
      case 1: return GREEN;
    }
  }
  
  public String toString(){
    return this.title;
  }
}

上述代码是在JDK1.5之前经典的多例设计模式,其目的是:限制本类实例化对象的产生个数。但是从JDK1.5之后出现了枚举类型。上述代码就可以改写如下:

enum Color{
  RED,GREEN,BLUE;
}

public class TestDemo{
  public static void main(String args[]){
    System.out.println(Color.BLUE);
  }
}

实际上,所谓的枚举就是一种高级的多例设计。

2. Enum类

enum和Enum的区别
enum是一个关键字,使用enum定义的枚举类本质上就是一个类,而这个类继承了Enum抽象类。 因此,使用enum定义的枚举,其实就是一个经过包装过的class类而已。

  • Enum类中的方法:
    • 构造方法: protected Enum(String name, int ordinal)
    • 取得枚举的名字:public final String name()
    • 取得枚举的序号:public final String ordinal()
    • 取得所有的枚举数据: public final String values()


      Enum类中的方法

当定义枚举对象 的时候,会自动设置序号和名字,由系统自动完成。

取得所有的枚举数据

3. 枚举中定义其他结构

虽然枚举等同于多例设计,但是多例设计可以定义更多的属性和方法。于是,只依靠以上的概念,只能产生若干对象,但是没有办法定义更多的方法和属性。因此,在后续的JDK设计中,引入可以在枚举中定义属性和方法的支持。
示例:在枚举中定义更多属性和方法

  1. 如果要在枚举中定义很多内容,枚举对象必须写在第一行。
  2. 构造方法绝对不能使用public,且要随着构造方法的有无参数等设计,同步修改枚举对象。
  3. 需要覆写父类的Object方法
image.png

4. 枚举的使用

枚举使用场景基本都是那些可以有限举例出来的情况。如性别,星期等。
如果需要使用switch字符串的时候,可以考虑使用枚举代替。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容