Чем Java Enum отличается от C ++ и других обычных Enum? - PullRequest
3 голосов
/ 15 февраля 2012

Чем enum, который мы получаем из Java 1.5, отличается от C ++ и других обычных типов Enum.

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

В 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 голосов
/ 15 февраля 2012

Язык программирования Java enums гораздо более мощный, чем его аналоги в других языках, которые чуть больше, чем прославленные целые числа. Новое объявление enum определяет полноценный класс (дублированный тип enum). В дополнение к решению всех проблем ( Не типобезопасно, Нет пространства имен, Хрупкость и Напечатанные значения неинформативны ), существует со следующим int Enum pattern, который использовался до Java 5.0:

public static final int SEASON_WINTER = 0;

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

Прочитать статью полностью Перечисления Java для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...