2012-02-15 3 views
3

Как перечисление, которое мы получаем из java 1.5, отличается от C++ и другого обычного типа Enum.Как Java Enum отличается от C++ и обычного обычного Enum?

+0

Вы имеете в виду перечисления в UML с «обычным типом перечисления»? – belgther

+0

Существует очень хорошее описание типа ENUM на разных языках в [Wikipedia] (http://en.wikipedia.org/wiki/Enumerated_type#C_and_syntactically_similar_languages) –

ответ

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 только числовые типы, струнный и перечисления. Однако я не могу экстраполировать обычных перечислений в целом ...

EDIT Еще одна вещь, которую 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 гораздо более эффективны, чем их коллеги на других языках, которые представляют собой нечто большее, чем прославленные целые числа. Новое объявление enum определяет полноценный класс (называемый типом перечисления). В дополнение к решению всех проблем (Не типизированного, Нет пространства имен, хрупкость и печатные значения неинформативные), которая существует со следующими int Enum pattern, которая использовалась до Java 5.0:

public static final int SEASON_WINTER = 0; 

также позволяет добавлять произвольное методы и поля для типа перечисления, для реализации произвольных интерфейсов и т. д. Типы Enum обеспечивают высококачественные реализации всех методов Object. Они являются Comparable и Serializable, а серийная форма предназначена для противостояния произвольным изменениям типа перечисления.

Подробнее читайте в статье Java Enums.

Смежные вопросы