Создать массив, в котором каждая позиция является типом перечисления - PullRequest
5 голосов
/ 12 декабря 2011

Привет, я хотел бы создать массив, в котором каждая позиция представлена ​​значением перечисления.

Например:

public enum type{

  green,blue,black,gray;

}

Теперь я хочу создать массив вкаждая позиция зеленая, синяя, ...

Я буду яснее.Я хотел бы создать массив, в котором позиция представлена ​​значением enum class.instead int [] array = new int [10] create int [] array = new int [type.value]

Ответы [ 5 ]

6 голосов
/ 12 декабря 2011

Это type[] allValues = type.values().См. этот вопрос .

В качестве альтернативы вы можете использовать EnumSet:

EnumSet<type> types = EnumSet.allOf(type.class);

, что дает вам высокую производительность Set заполненную реализациюсо значениями вашего перечисления.

PS: имя класса перечисления должно начинаться с большой буквы (CamelCase).

РЕДАКТИРОВАТЬ:

Кажется, вы хотите массивиз порядковых позиций значений вашего эмума (зачем кому-то использовать массив вместо правильной коллекции в наше время?):

type[] colors = type.values();
List<Integer> list = new ArrayList<Integer>(colors.length);
for (type color : colors) {
  list.add(color.ordinal());
}
Integer[] array = list.toArray(new Integer[0]);

EDIT2: Может быть, вы хотите Map<Integer, type> с ключами и значениями вроде 0 => green, 1 => blue, 2 => black, 3=> gray (вопрос все еще не ясен)?

2 голосов
/ 15 декабря 2011

Пожалуйста, сначала исправьте меня, если я ошибаюсь: вы пытаетесь связать каждый цвет со значением int.

Если это так, то вам нужен ассоциативный массив , который в Java моделируется как Map. Таким образом, вы можете использовать Map<type, Integer> для достижения желаемого (предпочтительно EnumMap, который оптимизирован для использования клавиш Enum).

// I renamed your "type" to Color
Map<Color, Integer> map = new EnumMap<Color, Integer>(Color.class);
map.put(Color.BLUE, 3);

Однако, если вы действительно хотите использовать массив, вы можете использовать метод ordinal() ваших констант enum (который возвращает int, представляющий позицию константы в объявлении enum, начиная с 0):

int[] ints = new int[Color.values().length];
ints[Color.BLUE.ordinal()] = 3;

Если это сопоставление должно быть уникальным для всего вашего приложения (если вам никогда не нужно ассоциировать цвет с более чем одним значением одновременно; другими словами, если это не тот случай, когда какой-то клиент хранит BLUE --> 2 и некоторые другие хранилища BLUE --> 3), тогда было бы лучше сохранить это значение в самом перечислении:

enum Color {
    GREEN, BLUE, BLACK, GRAY;

    private int value;

    // ...getter and setter for value...

}

Тогда вы можете написать:

Color.BLUE.setValue(8);

А для чтения значений:

for (Color c : Color.values()) {
    System.out.println("There are " + c.getValue() + " occurences of " + c);
}
0 голосов
/ 17 сентября 2016

Перечисления являются расширениями java.lang.Enum, поэтому вы можете использовать методы java.lang.Enum для использования перечисления в качестве измерения массива.

перечисление . values ​​(). Length отображает размер перечисления;

enumValue . ordinal () отображает индекс значения в перечислении.

Например:

public class thisClass {
    enum thisEnum = {valA, valB, valC, valD, valE }
    private int[] arrayForThisEnum;

    public thisClass() {
        this.arrayForThisEnum = new int[thisEnum.values().length];
        // further initialization
    }

    public void addOne(thisEnum xxx) {
        this.arrayForThisEnum[xxx.ordinal()]++;
    }
}
0 голосов
/ 12 декабря 2011

Вы хотите массив type объектов? Вы можете позвонить type[] types = type.values()

0 голосов
/ 12 декабря 2011

Это должно работать:

 MyColor[] myList;

затем

 myList = new MyColor[20];

nb, я бы не использовал type в качестве имени перечисления, так как оно не имеет хорошего значения.Что-то вроде цвета лучше.

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