枚举
-
限制一个类的对象产生范围。
-
举例:
-
定义一个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();
}
和继承接口有些大同小异。