19---java中枚举02(枚举)

 

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;

你可能感兴趣的:(19---java中枚举02(枚举))