2012-02-15 85 views
3

我們從java 1.5獲得的枚舉如何與C++和其他傳統枚舉類型不同。Java Enum和C++以及其他傳統的Enum不同,Java Enum如何?

+0

你是指在UML中使用「常規枚舉類型」的枚舉? – belgther 2012-02-15 07:53:52

+0

[Wikipedia](http://en.wikipedia.org/wiki/Enumerated_type#C_and_syntactically_similar_languages)上有不同語言的ENUM類型的很好的描述。 – 2012-02-15 07:57:43

回答

5

在Java枚舉是複雜的對象,而在C++中,每個枚舉對象都與一個整數值關聯。在java中你可以有一個枚舉值相關的幾個屬性:

enum MyCategory { 
    SPORT("The sport category", "sport.png"), 
    NEWS("the news category", "news.jpg"); 

    private String description; 
    private String iconPath; 

    private MyCategory(String description, String iconPath) { 
     this.description = description; 
     this.iconPath = iconPath; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public String getIconPath() { 
     return iconPath; 
    } 
} 

而且在Java中,你可以只switch數類型,字符串和枚舉。不過,我不能一概而論傳統枚舉作爲一個整體......

編輯一兩件事java的枚舉能做的就是聲明每個值操作(從java tutorial拍攝):

public enum Operation { 
    PLUS { double eval(double x, double y) { return x + y; } }, 
    MINUS { double eval(double x, double y) { return x - y; } }, 
    TIMES { double eval(double x, double y) { return x * y; } }, 
    DIVIDE { double eval(double x, double y) { return x/y; } }; 

    // Do arithmetic op represented by this constant 
    abstract double eval(double x, double y); 
} 
3

的Java編程語言enums比其他語言中的對應語言要強大得多,而這些語言只是整體的榮耀。新的枚舉聲明定義了一個完整的類(稱爲枚舉類型)。除了解決所有問題(不是類型安全的,沒有命名空間,脆性和打印的值是無信息)與以下int Enum pattern這是之前Java 5.0中使用的存在:

public static final int SEASON_WINTER = 0; 

它也允許你添加任意的枚舉類型的方法和字段,實現任意接口等等。枚舉類型提供了所有Object方法的高質量實現。它們是ComparableSerializable,並且該串行表單設計用於承受枚舉類型的任意更改。

閱讀完整文章Java Enums瞭解更多詳情。