枚举类型

来源:互联网 发布:灵娱网络每天流水多少 编辑:程序博客网 时间:2024/05/29 13:41

枚举的关键字是enum,可以定义在当前的类中:

public enum sex{

      man,woman

  }

也可以定义在单独的类中,调用时,直接调用System.out.println(sex.man);

需要注意的是,sex.man的类型是枚举类型,也就是sex,例如sex mysex = sex.woman;

注意:1、枚举就相当于是一个类,里面的内容就相当于类的属性。


常用方法:


1、name()

获得当前枚举类型的名称:man

2、toString()

转换为字符串

3、ordinal()

获得当前类型的排序号,从0开始计算

4、valueOf("man")

将字符串类型转换为枚举类型

5、mysex.values()

将枚举类型转换为数组,可以对其进行遍历,注意:转换后数组的类型是枚举类型:sex[] arraySex = sex.values();


枚举的使用:

1、在JDK1.5之前,定义常量一般使用public static final ,现在可以使用枚举定义常量,而且枚举比常量提供了更多的方法:

 enum Color{

  RED,BLACK,YELLOW

}

使用枚举类型时,不需要实例化,可以直接使用:

System.out.println(Color.RED);

2、     在JDK1.5之后switch在支持int,char,byte,short等类型的基础上,也支持了enum类型(在JDK1.7后,switch支持了String!) 使用枚举,可以增强代码的可读性:

 Color color = Color.RED;

     switch(color){

     case  RED :

        System.out.println("红色");

        break;

     case  BLACK :

        System.out.println("不是红色");

        break;

     case  YELLOW :

        System.out.println("不是红色");

        break;  

     }

3、     向枚举中添加方法

枚举中的变量是可以加参数的,RED("红色",1), GREEN("绿色", 2),加了参数之后,必须相应的加上成员变量的定义和带参数的构造方法(构造方法必须是私有的);同时,可以加普通的方法:

enum Color{

   RED("红色", 1),GREEN("绿色", 2),YELLO("黄色", 3);

   // 成员变量

    private Stringname;

    private int index;

 

    // 构造方法

    private Color(String name,int index) {

        this.name = name;

        this.index = index;

    }

 

    // 普通方法

    public static String getName(int index) {

        for (Color c : Color.values()) {

            if (c.getIndex() == index) {

                return c.name;

            }

        }

        return null;

    }

 

    // get set 方法

    public String getName() {

        returnname+"getName";

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getIndex() {

        returnindex;

    }

    public void setIndex(int index) {

        this.index = index;

}}

调用普通的方法时直接调用:

System.out.println(Color.getName(1));

4、     枚举中可以覆盖父类的方法:

 // 覆盖方法

     @Override

     public StringtoString(){

         return this.index + "_"+ this.name;

}

调用覆盖的方法:

System.out.println(Color.GREEN.toString());

5、     枚举类型都是继承自java.lang.Enum,由于java不支持多继承,所有枚举对象不能继承其他类。但是枚举类型也可以实现接口(实现接口时,需要同时实现接口的所有方法)。

6、     使用接口组织枚举(有什么用处???)

 public interfaceFood {

    enum Coffeeimplements Food {

        BLACK_COFFEE,DECAF_COFFEE, LATTE,CAPPUCCINO

    }

 

    enum Dessertimplements Food {

        FRUIT, CAKE,GELATO

}}



枚举集合:


枚举集合包括:java.util.EnumSet和java.util.EnumMap。EnumSet中元素不能重复,EnumMap中key是Enum类型,value是任意类型。

 EnumMap的使用:

EnumMap em = newEnumMap(Color.class);

      em.put(Color.RED,"hongse");

      em.put(Color.GREEN,"lvse");

  System.out.println(em);

EnumMap和其他Map类似,但是需要注意的是,实例化时需要将相应的枚举类传入,put对象时,key是enum对象。

EnumSet的使用:

EnumSetes = EnumSet.allOf(Color.class);

         System.out.println(es);

EnumSet需要使用EnumSet.allOf()方法,将枚举类中所有的对象都放到EnumSet中.

说明:

1、 既然可以直接将枚举放入集合,为什么还要使用枚举集合呢,EnumMap中指定了是哪个枚举类型,其他枚举类型不可以加入;EnumSet可以直接将枚举类型直接转为集合类型,十分方便。


原创粉丝点击