枚举

enum Color
{
 RED,GREEN,BLUE;
}
public class EnumDemo {
 public static void main(String args[])
 {
  Color c=Color.RED;
  System.out.println(Color.RED+""+Color.BLUE);
 }
}

Enum类和enum关键字的区别

使用enum关键字可以定义一个枚举类型,那么实际上就相当于定义了一个类,此类继承了Enum类而已。

在Enum类的构造方法中是受保护的,实际上对于每一个枚举对象一旦声明之后,就表示自动调用此构造方法,所有的编号采用自动编号的方式进行。

enum Color
{
 RED,GREEN,BLUE;
}
public class EnumDemo {
 public static void main(String args[])
 {
  Color c=Color.RED;
  System.out.println(Color.RED+""+Color.BLUE);
     for(Color c1:Color.values())
     {
      System.out.println(c1);
      //输出枚举值和其中的自动编号
      System.out.println(c1.name()+"--->"+c1.ordinal());
     }
 }
}

类集对枚举的支持

EnumMap

EnumMap是Map的子类,与Map的操作是一致

import java.awt.Color;
import java.util.EnumMap;
import java.util.Map;
public class EnumMapDemo {
 public static void main(String args[])
 {
  EnumMap<Color,String> eMap=new EnumMap<Color,String>(Color.class);
     eMap.put(Color.RED, "红色"); 
     eMap.put(Color.GREEN, "绿色");
     eMap.put(Color.BLUE, "蓝色");
     for(Map.Entry<Color, String> me:eMap.entrySet())
     {
      System.out.println(me.getKey()+"-->"+me.getValue());
     }
 }
}

EnumSet

EnumSet本身是Set接口的子类,但是在此类中并没有任何的构造方法定义,表示构造方法被私有化了。此类的方法都是静态的操作。

import java.awt.Color;
import java.util.EnumSet;
import java.util.Iterator;
public class EnumSetDemo {
 public static void main(String args[])
 {
  //表示将全部的内容保存到集合
  EnumSet<Color> eSet=EnumSet.allOf(Color.class);
     Iterator<Color> iter=eSet.iterator();
     while(iter.hasNext())
     {
      System.out.println(iter.next());
     }

  //表示此类型的空集合

  //EnumSet<Color> eSet=EnumSet.noneOf(Color.class);
 }
}

 枚举的构造方法

可以在枚举中直接定义构造方法,但是一旦构造方法定义之后,则所有枚举对象都必须明确的调用此构造方法。

enum Color
{
 RED("红色"),GREEN("绿色"),BLUE("蓝色");
 private String name;
    Color(String name)
    {
      this.name=name; 
    }
}

枚举中的构造方法为默认的private权限

System.out.println(c1.name()+"--->"+c1.ordinal()+"---->"c1.getName());


让枚举实现一个接口

一个枚举实现一个接口之后,各个枚举对象都必须实现接口中的抽象方法


interface Info
{
 public String getColor();
}
enum Color implements Info
{
 RED
 {
  public String getColor()
  {
   return "红色";
  }
 },
 GREEN
 {
     public String getColor()
     {
      return "绿色";
     }
 },
 BLUE
 {
     public String getColor()
     {
      return "蓝色";
     }
 };
}
public class EnumDemo5 {
 public static void main(String args[])
 {
  for(Color c:Color.values())
  {
   System.out.println(c.ordinal()+"---->"+c.getColor()+"---->"+c.getName());
  }
 }
}

 在枚举中定义抽象方法

在一个枚举中也可以定义多个抽象方法,枚举中的每个对象都必须单独实现。

原文地址:https://www.cnblogs.com/jinzhengquan/p/1948794.html