java新特性—枚举

来源:互联网 发布:春晚 知乎 编辑:程序博客网 时间:2024/05/20 09:44

枚举

  • 限制一个类的对象产生范围。

  • 举例:

    • 定义一个Colour类,颜色只能取红、绿、蓝。

    • 可以使用enum定义一种新的类,称为枚举类型

package cn.enum.RobertChao;public enum Color{    RED,GREEN,BIUE;}

1、可以通过“枚举.内容”的形式进行取值操作。

  • 【枚举类的名字.类中设置得内容的名字】

2、输出枚举中的全部内容,可以使用foreach完成。

  • foreach 与 for 的区别。

    • for循环,通过下标,对循环中的代码反复执行。可以通过index取得元素。

    • foreach,从头到尾遍历集合中的对象。foreach使用的时候,会锁定集合的对象,期间不能进行修改。

  • To Choice foreach or for.

    • foreach相对于for循环,代码减少了,foreach依赖IEnumerable。在运行的时候效率低于for循环。

    • 在处理不确定循环次数的循环,或者循环次数需要计算的情况下。使用foreach比较方便。

    • 在复杂的循环设计时,还是应该使用for循环更加的灵活。

利用foreach把枚举类型中的内容全部取出。

package cn.enum.RobertChao;public class ForeachEnum{    public static void main(String[] args){        for(Color c:Color.values()){            System.out.println(c);        }    } }

3、Enum类 和 enum关键字 。

使用enum关键字定义的枚举类,就相当是一个子类,父类是Enum类。

Enum类中定义了下面几个方法:

方法名称 描述 public Enum(String name;int ordinal) 只能被其子类访问,此构造方法为自动调用 public final String name() 枚举的名字 public final int ordinal() 枚举的序号

上述构造方法完全与name和ordinal有关

所以这个类的构造方法,在enum每次定义枚举类型的时候,实际上都会自动调用构造

4、类集对枚举的支持(EnumSet、EnumMap类)。

① EnumMap是Map接口的子类,可以存放一对内容。

`EnumMap也是可以存放一对内容的。`

举例:

EnumMap<Color,String> map        = new EnumMap<Color,String>(Color.class);    map.put(Color.RED,"红色");    System.out.println(map.get(Color.RED));

② EnumSet是Set接口的子类。

  • EnumSet.allof()、EnumSet.noneof()。

EnumSet.allof();表示将枚举的全部内容设置到集合之中。

EnumSet.noneof();表示Set集合中只能是枚举内容,但不包含枚举中的具体内容。

举例:

EnumSet<Color> set = new EnumSet.allof(Color.class);for(Color x : set){    System.out.println(x);}

让枚举实现接口

在枚举操作中,一个枚举类是允许实现多个接口的。
但是要求此时枚举中的每个对象都必须单独各自覆写接口中的抽象方法。

举例:

package cn.com.RebortChao;interface Info{    public String getColor();}poublic enum Color implements Info{    RED{        public String getColor(){            return "红色";        }    },    GREEN{        public String getColor(){            return "绿色";        }    },    BLUE{        public String getColor(){            return "蓝色";        }    };}

测试一下上述枚举类对接口的引用。

package cn.com.RebortChao;public class Test{    public static void main(String[] args){        for(Color c : Color.values()){            System.out.println(c.getColor());        }    }}

在枚举中实现抽象方法

  • 在枚举中定义抽象方法后,枚举中的每个对象都必须分别实现此抽象方法。
package cn.com.RebortChao;poublic enum Color{    RED{        public String getColor(){            return "红色";        }    },    GREEN{        public String getColor(){            return "绿色";        }    },    BLUE{        public String getColor(){            return "蓝色";        }    };    public abstart String getColor();}

和继承接口有些大同小异。