JAvaでは列挙(enum)でよく見られる7つの使い方

5451 ワード

JDK 1.5の前に、JAVAは2つの方法で新しいタイプを定義することができます:クラスとインタフェース、大部分のオブジェクト向けプログラミングに対して、この2つがあれば十分なようですが、いくつかの特殊な状況では適切ではありません.たとえば、Colorクラスを定義するには、Red、Green、Blueの3つしかありません.他の値はエラーで、JDK 1.5以降に列挙タイプが導入されます.
用法一:定数
JDK 1.5以前に定数を定義したのは、public static fianl....であり、列挙は関連する定数を列挙タイプにグループ化することができ、列挙は定数よりも多くの方法を提供した.
public enum Color {  
  RED, GREEN, BLANK, YELLOW  
}  
Color c = Color.BLUE ;        //     
System.out.println(c) ;

用法二:switch
JDK 1.5からswitch文はEnum列挙値をサポートし、列挙を使用することで、コードの可読性を向上させることができます.
public class SwitchEnum {
    Color color = Color.RED;
    public void change() {
        switch (color) {
            case RED:
                color = Color.GREEN;
                break;
            case YELLOW:
                color = Color.RED;
                break;
            case GREEN:
                color = Color.YELLOW;
                break;
        }
    }
}

使用法3:列挙に新しいメソッドを追加する
public enum Color {  
    RED("  ", 1), GREEN("  ", 2), BLANK("  ", 3), YELLO("  ", 4);  
    //       
    private String name;  
    private int index;  
    //       
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //       
    public static String getName(int index) {  
        for (Color c : Color.values()) {  
            if (c.getIndex() == index) {  
                return c.name;  
            }  
        }  
        return null;  
    }  
    // get set     
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getIndex() {  
        return index;  
    }  
    public void setIndex(int index) {  
        this.index = index;  
    }  
}  

使用法四:列挙を上書きする方法
以下にtoString()メソッドオーバーライドの例を示す.
public enum Color {  
    RED("  ", 1), GREEN("  ", 2), BLANK("  ", 3), YELLO("  ", 4);  
    //       
    private String name;  
    private int index;  
    //       
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //      ,      
    @Override  
    public String toString() {  
        return this.index+"_"+this.name;  
    }  
}  

使用法五:インタフェースの実装
すべての列挙はjava.lang.Enumクラスから継承されます.Javaはマルチ継承をサポートしていないため、列挙オブジェクトは他のクラスを継承できません.
public interface Behaviour {  
    void print();  
    String getInfo();  
}  
public enum Color implements Behaviour{  
    RED("  ", 1), GREEN("  ", 2), BLANK("  ", 3), YELLO("  ", 4);  
    //       
    private String name;  
    private int index;  
    //       
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    //      
    @Override  
    public String getInfo() {  
        return this.name;  
    }  
    //      
    @Override  
    public void print() {  
        System.out.println(this.index+":"+this.name);  
    }  
}  

使用法6:インタフェースを使用して列挙を整理する
public interface Food {  
    enum Coffee implements Food{  
        BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
    }  
    enum Dessert implements Food{  
        FRUIT, CAKE, GELATO  
    }  
}  

使用法7:列挙集合の使用について
JAva.util.EnumSetとjava.util.EnumMapは2つの列挙集合です.EnumSetは、集合内の要素が重複しないことを保証します.EnumMapのkeyはenumタイプであり、valueは任意のタイプであってもよい.
  • EnumMap
  • を使用
    import java.util.EnumMap ;
    import java.util.Map ;
    enum Color{
        RED , GREEN , BLUE ;
    }
    public class EnumMapDemo{
        public static void main(String args[]){
            Map desc = null ;        //   Map  ,      
            desc = new EnumMap(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
  • を使用
    import java.util.EnumSet ;
    enum Color{
        RED , GREEN , BLUE ;
    }
    public class EnumSetDemo{
        public static void main(String args[]){
            EnumSet esOld = null ;            //     EnumSet  
            EnumSet 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 temp){    //        
            for(Color c:temp){        //      EnumSet    
                System.out.print(c + "、") ;
            }
            System.out.println() ;
        }
    };