------- android培训 、java培训 、期待与您交流! ----------
枚举:定义一个具体范围规定只能从这个范围中取值。枚举其实就是一种类型,跟int,char这种类似,就是定义变量时限制输入的,你只能赋enum里面规定的值。
下面是一个关于颜色的枚举定义:
public enum Color{
RED,GREEN,BLUE ; // 定义三个枚举的类型
};
Enum像是特殊的class,实际上enum声明定义的类型就是一个类。而这些类都是类库中enum类的子类(java.lang.Enum).它们继承了这个Enum中的许多有用的方法。
compareTo()方法:enum实现了java.lang.Comparable接口,因此可以比较与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。当然,前提是两个枚举值必须属于同一个枚举类,否则会抛出ClassCastException()异常。
Values()方法:静态方法,返回一个包含全部枚举值的数组。
public class PrintEnum{
public static void main(String args[]){
for(Color c:Color.values()){ // 输出枚举中的全部内容
System.out.println(c) ;
}
}
};
Name()方法:返回此枚举常量的名称,在其枚举声明中对其进行声明;
Ordinal()方法:返回此枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)
public class GetEnumInfo{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal() + " --> " + c.name()) ;
}
}
};
valueOf(Class<T> enumType,String name)
方法:返回带指定名称的指定枚举类型的枚举常量。
Color c = Color.valueOf(Color.class,"BLUE") ;
枚举的构造方法的使用:
enum Color{
RED("红色"),GREEN("绿色"),BLUE("兰色") ;
private Color(String name){
this.setName(name) ;
}
private String name ; // 定义name属性
public void setName(String name){
this.name = name ;
}
public String getName(){
return this.name ;
}
}
public class ConstructorEnum{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal() + " --> " + c.name()
+"(" + c.getName() + ")") ;
}
}
};
类集对Enum的支持:
EnumMap:的操作跟Map类似:
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则主要靠静态方法实现。
public static <E extends Enum<E>> EnumSet<E> allOf(Class<E> elementType)
创建一个包含指定元素类型的所有元素的枚举 set。
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo01{
public static void main(String args[]){
EnumSet<Color> es = null ; // 声明一个EnumSet对象
System.out.println("======== EnumSet.allOf(Color.class) =====") ;
es = EnumSet.allOf(Color.class) ; // 将枚举的全部类型设置到EnumSet对象之中
print(es) ;
}
public static void print(EnumSet<Color> temp){ // 专门的输出操作
for(Color c:temp){ // 循环输出EnumSet中的内容
System.out.print(c + "、") ;
}
System.out.println() ;
}
};
Of()方法:创建一个最初包含指定元素的枚举 set。用 1到 5个元素重载此方法,从而初始化一个枚举 set。第 6次重载使用变量参数功能。此重载可能创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo02{
public static void main(String args[]){
EnumSet<Color> es = null ; // 声明一个EnumSet对象
System.out.println("======== EnumSet.of(Color.BLUE) =====") ;
es = EnumSet.of(Color.BLUE) ; // 将枚举的全部类型设置到EnumSet对象之中
print(es) ;
}
public static void print(EnumSet<Color> temp){ // 专门的输出操作
for(Color c:temp){ // 循环输出EnumSet中的内容
System.out.print(c + "、") ;
}
System.out.println() ;
}
};
noneOf()方法:创建一个具有指定元素类型的空枚举 set。
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo03{
public static void main(String args[]){
EnumSet<Color> es = null ; // 声明一个EnumSet对象
System.out.println("======== EnumSet.noneOf(Color.class) =====") ;
es = EnumSet.noneOf(Color.class) ; // 将枚举的全部类型设置到EnumSet对象之中
es.add(Color.RED) ; // 增加内容
es.add(Color.GREEN) ; // 增加内容
print(es) ;
}
public static void print(EnumSet<Color> temp){ // 专门的输出操作
for(Color c:temp){ // 循环输出EnumSet中的内容
System.out.print(c + "、") ;
}
System.out.println() ;
}
};
complementOf()方法:创建一个其元素类型与指定枚举 set相同的枚举 set,最初包含指定 set中所不包含的此类型的所有元素。
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo04{
public static void main(String args[]){
EnumSet<Color> esOld = null ; // 声明一个EnumSet对象
EnumSet<Color> esNew = null ;
System.out.println("======== EnumSet.complementOf(Color.class) =====") ;
esOld = EnumSet.noneOf(Color.class) ; // 将枚举的全部类型设置到EnumSet对象之中
esOld.add(Color.RED) ; // 增加内容
esOld.add(Color.GREEN) ; // 增加内容
esNew = EnumSet.complementOf(esOld) ; // 不包含指定内容
print(esNew) ;
}
public static void print(EnumSet<Color> temp){ // 专门的输出操作
for(Color c:temp){ // 循环输出EnumSet中的内容
System.out.print(c + "、") ;
}
System.out.println() ;
}
};
copyOf()方法:创建一个从指定 collection初始化的枚举 set。如果指定的 collection是一个EnumSet实例,则此静态工厂方法的功能与copyOf(EnumSet)
相同。否则,指定的 collection必须至少包含一个元素(以确定新枚举 set的元素类型)。
import java.util.EnumSet ;
enum Color{
RED , GREEN , BLUE ;
}
public class EnumSetDemo05{
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() ;
}
};
枚举类型也可以实现接口但要注意的是枚举里的每个元素都必须单独覆写接口的抽象方法。
interface Print{
public String getColor() ;
}
enum Color implements Print{
RED{
public String getColor(){
return "红色" ;
}
},GREEN{
public String getColor(){
return "绿色" ;
}
},BLUE{
public String getColor(){
return "蓝色" ;
}
} ;
}
public class InterfaceEnumDemo{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.print(c.getColor() + "、") ;
}
}
};
枚举也可以包含抽象方法:
enum Color implements Print{
RED{
public String getColor(){
return "红色" ;
}
},GREEN{
public String getColor(){
return "绿色" ;
}
},BLUE{
public String getColor(){
return "蓝色" ;
}
} ;
public abstract String getColor() ;
}
public class AbstractMethodEnum{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.print(c.getColor() + "、") ;
}
}
};