2012-02-15 44 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了解更多详情。