Enum:
从前面已经知道,使用enum关键字可以定义一个枚举,实际上次关键字表示的是
java.lang.Enum类型,即:使用enum声明的枚举类型就相当于定义一个类,而此类
则默认继承java.lang.Enum类。
java.lang.Enum类的定义如下:
public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>,java.io.Serializable
1、Enum的构造方法:
protected Enum(String name,int ordinal)
构造方法中接受的两个参数,一个表示枚举的名字,另一个表示枚举的序号;
public enum Color{
RED,GREEN,BLUE;
}
RED实际上就表示的是枚举的名字,默认的编号是0;
public class Demo{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal()+"---->"+c.name());
}
}
}
以上创建枚举时即写RED时就调用了枚举的构造方法;
如果此时,希望做一些改进,希望可以使用一些文字表示颜色的信息,则可以按照最早的Color类
的形式,在枚举类中定义属性及自己的构造方法,但是一旦定义了有参数的构造之后,在声明
枚举对象的时候就必须明确的调用构造方法,并传递参数;
enum Color{
RED("红色"),GREEN("绿色"),BLUE("蓝色");
private Color(String name){
this.setName(name);
}
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
}
public class Demo{
public static void main(String args[]){
for(Color c:Color.values()){
System.out.println(c.ordinal()+"---->"+c.name()
+"("+c.getName()+")");
}
}
}
如果现在不想通过构造设置内容,而是希望通过setter()方法设置内容,则就必须按如下执行:
enum Color{
RED,GREEN,BLUE;
private String name;
public void setName(String name){
switch(this){
case RED:{
if("红色".equals(name)){
this.name=name;
}
else{
System.out.println("设置内容有误。");
}
break;
}
case GREEN:{
if("绿色".equals(name)){
this.name=name;
}
else{
System.out.println("设置内容有误。");
}
break;
}
case BLUE:{
if("蓝色".equals(name)){
this.name=name;
}
else{
System.out.println("设置内容有误。");
}
break;
}
}
this.name=name;
}
public String getName(){
return this.name;
}
}
public class Demo{
public static void main(String args[]){
Color c=Color.BLUE;
c.setName("兰色");
c.setName("蓝色");
System.out.println(c.getName());
}
}
还可以这样:
public class Demo{
public static void main(String args[]){
Color c=Color.valueOf(Color.class,"BLUE");
c.setName("兰色");
c.setName("蓝色");
System.out.println(c.getName());
}
}
在枚举中实际上已经实现好了Comparable接口,所以枚举中的内容是可以排序的;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
enum Color{
RED,GREEN,BLUE;
}
public class Demo{
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.println(iter.next()+"、");
}
}
}
TreeSet现实了Comparable接口,实现了排序,如果以上的枚举没有实现Comparable接口的
话输出的结果会按照字母顺序,而现在不是而是按照RED、GREEN、BLUE
由此也可以证明其确实是现在了Comparable;