объявить enum для использования в массиве? - PullRequest
2 голосов
/ 18 июля 2011

Извините за возможно простой вопрос.

Мне нужен массив флагов

boolean[20] isTownVisited

Но использовать в нем int неудобно, я хочу использовать строки:

 isTownVisited[Town.Milan] = true;

или

 return isTownVisited[Town.Rome]

Я пытался объявить enum

enum Town {Milan, Rome, Florence, Napoli}

Но я все еще не могу использовать его для индексации моего логического массива. Как решить эту проблему, могу я написать что-то вроде:

enum Town {Milan = 0, Rome = 1, Florence = 2, Napoli = 3}

Ответы [ 4 ]

6 голосов
/ 18 июля 2011

Вы можете использовать EnumSet.

Set<Town> towns = EnumSet.of(Town.Milan);

towns.add(Town.Rome);

return towns.contains(Town.Napoli);

Под капотом EnumMap и EnumSet используют int ordinal(); EnumSet использует растровое изображение.

1 голос
/ 18 июля 2011

Ну и дела ... Я бы просто использовал это:

boolean[Town.values().length] isTownVisited;

isTownVisited[Town.Milan.ordinal] = true;
0 голосов
/ 18 июля 2011

Похоже, вам нужна карта вместо массива.Вы можете создать Map<Town, Boolean>, где Town - это перечисление, а логическое - это посещение этого города или нет.

0 голосов
/ 18 июля 2011

вы всегда можете сделать открытый статический класс со всеми объявленными переменными

так

public class Town{
   public static bool Rome = false;
   // and the rest
}

Тогда вы можете просто использовать Town.rome для доступа к переменным ...

Примечание: не создавайте статические переменные, если вы хотите использовать эти переменные внутри нескольких объектов.

В этом случае создайте нормальные переменные, а затем создайте новый объект и используйте переменные этого объекта

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