Рубрики
Без рубрики

C# для разработчика Java: Перечисления

Перечисления – это очень распространенное понятие. Конечно, он существует и в Java, и в C#. Однако Java и C# en… Помечено как java, c sharp, для начинающих.

Перечисления – это очень распространенное понятие. Конечно, он существует и в Java, и в C#. Однако перечисления Java и C# не обладают одинаковыми возможностями. Цель этого поста в блоге – показать их различия.

В Java перечисления очень похожи на обычные классы: они могут реализовывать интерфейсы и иметь методы. Однако они не могут наследовать другие классы или быть созданы явно. Их можно рассматривать как окончательные классы (или запечатанные классы в C#), которые уже наследуют виртуальный класс “enum”, имеют только частные конструкторы и набор предопределенных экземпляров (значения перечисления).

Например, давайте возьмем пример кодов состояния HTTP. На Java можно написать такой код:

enum HttpStatus implements Comparable {
  OK(200), SERVER_ERROR(500), NOT_FOUND(404);

  private final int code;

  HttpStatus(int code) {
      this.code = code;
  }

  // This is a regular instance method
  int code() {
      return code;
  }

  // This is the implementation of the Comparable interface
  @Override
  int compareTo(HttpStatus o) {
      // Http statuses will be sorted by status code
      return Integer.compare(code, o.code);
  }
}
HttpStatus status = HttpStatus.OK;

// The 'code' method can be invoked like any other method
int code = status.code();

В C# перечисления – это просто замаскированные целые числа. Предыдущий фрагмент может быть смоделирован в C# только потому, что атрибут code имеет значение int . В противном случае было бы очень сложно вести себя так же:

enum HttpStatus {
  // int value of the enum can be forced to a specific value
  OK = 200,
  NOT_FOUND = 404,
  SERVER_ERROR = 500
}
HttpStatus status = HttpStatus.OK;

// The enum can be casted to an int to get its value
int code = (int) status;

Подводя итог, можно сказать, что перечисления Java намного мощнее, чем их аналоги на C#. Я часто использую эти функции, когда пишу Java-код и я думаю, что мне было бы их не хватать, если бы мне приходилось ежедневно писать код на C#.

Оригинал: “https://dev.to/rnowif/c-for-the-java-developer-enums-2864”