枚举详解

来源:互联网 发布:linux服务器配置nodejs 编辑:程序博客网 时间:2024/06/08 00:04

在JDK1.5之前,JAVA可以有两种方式定义新类型:类和接口,对于大部分面向对象编程,有这两种似乎就足够了,但是在一些特殊情况就不合适。例如:想要定义一个Color类,它只能有Red,Green,Blue三种,其他值则是错误,在JDK1.5之后便引入枚举类型。

枚举其实就是一种类型,跟int, char 这种差不多,就是定义变量时限制输入的,你只能够赋enum里面规定的值。

public enum Color{    RED,GREEN,BLUE ;    // 定义三个枚举的类型};

枚举中有三个取值,以后再取的时候,只能从这三个内容取

public class GetEnumContent{    public static void main(String args[]){        Color c = Color.BLUE ;        // 取出蓝色        System.out.println(c) ;    }};

可以直接使用在Switch语句上

复制代码
public class SwitchPrintEnum{    public static void main(String args[]){        for(Color c:Color.values()){    // 输出枚举中的全部内容            print(c) ;        }    }    public static void print(Color color){        switch(color){            case RED:{                System.out.println("红颜色") ;                break ;            }            case GREEN:{                System.out.println("绿颜色") ;                break ;            }            case BLUE:{                System.out.println("蓝颜色") ;                break ;            }            default:{                System.out.println("未知颜色") ;                break ;            }        }    }};
复制代码

使用enum关键字可以定义一个枚举,也可以定义一个Eunm类

枚举类的操作方法:

在枚举已经实现Comparable接口,所以在枚举中的内容可以排序。

案列一

复制代码
import java.util.Iterator;import java.util.Set ;import java.util.TreeSet ;enum Color{    RED,GREEN,BLUE ;}public class ComparableEnum{    public static void main(String args[]){        Set<Color> t = new TreeSet<Color>() ;    // 设置类型        t.add(Color.GREEN) ;    // 加入绿色        t.add(Color.RED) ;        // 加入红色        t.add(Color.BLUE) ;        // 加入蓝色        Iterator<Color> iter = t.iterator() ;        while(iter.hasNext()){            System.out.print(iter.next() + "") ;        }    }};
复制代码

 

案列二 

使用EnumMap

复制代码
import java.util.EnumMap ;import java.util.Map ;enum Color{    RED , GREEN , BLUE ;}public class EnumMapDemo{    public static void main(String args[]){        Map<Color,String> desc = null ;        // 定义Map对象,同时指定类型        desc = new EnumMap<Color,String>(Color.class) ;    // 实例化EnumMap对象        desc.put(Color.RED,"红色") ;        desc.put(Color.GREEN,"绿色") ;        desc.put(Color.BLUE,"蓝色") ;        System.out.println("====== 输出全部的内容 ======") ;        for(Color c:Color.values()){            System.out.println(c.name() + " --> " + desc.get(c)) ;        }        System.out.println("====== 输出全部的键值 ======") ;        for(Color c:desc.keySet()){            System.out.print(c.name() + "") ;        }        System.out.println() ;        System.out.println("====== 输出全部的内容 ======") ;        for(String s:desc.values()){            System.out.print(s + "") ;        }    }};
复制代码

案列三

使用 EnumSet

复制代码
import java.util.EnumSet ;enum Color{    RED , GREEN , BLUE ;}public class EnumSetDemo{    public static void main(String args[]){        EnumSet<Color> esOld = null ;            // 声明一个EnumSet对象        EnumSet<Color> esNew = null ;        System.out.println("======== EnumSet.copyOf(Color.class) =====") ;        esOld = EnumSet.noneOf(Color.class) ;    // 将枚举的全部类型设置到EnumSet对象之中        esOld.add(Color.RED) ;    // 增加内容        esOld.add(Color.GREEN) ;    // 增加内容        esNew = EnumSet.copyOf(esOld) ;    // 从已有的集合拷贝过来        print(esNew) ;    }    public static void print(EnumSet<Color> temp){    // 专门的输出操作        for(Color c:temp){        //  循环输出EnumSet中的内容            System.out.print(c + "") ;        }        System.out.println() ;    }};
复制代码

 

0 0