Есть ли способ для перечисления Java иметь «пропущенные» целочисленные значения для своих элементов? - PullRequest
4 голосов
/ 13 июля 2009

Например, у меня есть два элемента в перечислении. Я хотел бы, чтобы первое было представлено целочисленным значением 0 и строкой A, а второе было бы представлено целочисленным значением 2 и строкой «B» (в отличие от 1). Возможно ли это?

В настоящее время мое перечисление объявлено так:

public enum Constants {
    ZERO("Zero");
    TWO("Two");
}

Если бы я получил целочисленные значения ZERO и TWO, я бы в настоящее время получил 0 и 1 соответственно. Тем не менее, я хотел бы получить 0 и 2.

Ответы [ 4 ]

14 голосов
/ 13 июля 2009

Я предполагаю, что вы имеете в виду способ заставить порядковый номер Enum возвращать определенное пользователем значение. Если это так, нет.

Если вы хотите вернуть определенное значение, внедрите (например, getValue ()) и передайте его в конструктор Enum.

Например:

public enum Constants {
    ZERO("Zero",0),
    TWO("Two",2);

    final private String label;
    final private int value;

    Constants(String label, int value) {
        this.label = label;
        this.value= value;
    }

    public int getValue() {
        return value;
    }

    public String getLabel() {
        return label;
    }
}
4 голосов
/ 13 июля 2009

Определите целочисленное поле с соответствующим именем для вашего перечисления и инициализируйте его тем значением, которое вам больше подходит. Внутренний порядковый номер перечислений не предназначен для того, чтобы нести значение.

3 голосов
/ 13 июля 2009

попробуйте что-то вроде этого:

public enum MyEnum {

A(1), B(2), C(3);

int myOrdinal;

private MyEnum(int myOrdinal) {
    this.myOrdinal = myOrdinal;
}

public int getMyOrdinal() {
    return myOrdinal;
}

Если вы полагаетесь на внутреннюю нумерацию перечисления, то порядок вещей и даже разные jvm могут обрабатывать это по-разному, что приведет к непредсказуемому поведению (если только оно не указано в «enum jsr-161», не читайте Это...).

Я видел реализацию, которая опиралась на внутренний порядковый номер, он использовался для упорядочивания в выпадающем списке веб-страниц. Это приводило к смешным ошибкам, когда кто-то любезно «очистил» значения перечисления ..

1 голос
/ 13 июля 2009

Вы хотите передать целое число в конструкторе, а затем использовать Строковый ввод = ... int inputAsInt = Constants.valueOf (input.toUpperCase ()). getValue ();

Что-то вроде

public enum Constants{
 ZERO(0),
 TWO(1);
 private final int value;
 public Numbers(int value){
  this.value = value;
 }

 public int getValue(){
  return this.value;
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...