1. 程式人生 > >java新特性—列舉

java新特性—列舉

列舉

  • 限制一個類的物件產生範圍。

  • 舉例:

    • 定義一個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();
}

和繼承介面有些大同小異。