Поиск перечисления в Java - PullRequest
0 голосов
/ 15 марта 2012

Я не слишком знаком с Java и нуждаюсь в некоторой помощи с поиском перечисления (я думаю, это так и называется?) У меня многолетний опыт работы с C, поэтому я знаю, чего я пытаюсь достичь с помощью C, ноЯ не знаю эквивалентного синтаксиса или конструкции в Java.

У меня нет среды C на этом компьютере, поэтому синтаксис может быть отключен, но я пытаюсь выполнить это:

typedef enum regions_t {
     REGION_CALIFORNIA,
     REGION_HAWAII,
     REGION_LOUISIANA,
     REGION_NUM_REGIONS
} regions_t;

typedef struct regionData_t {
    regions_t regionName;
    char_t[50] url;
    int32_t population;
 } regionData_t;

 regionData_t myRegions[REGION_NUM_REGIONS] {
     {REGION_CALIFORNIA, "http://http://california.gov/", 10123321},
     {REGION_HAWAII, "http://hawaii.gov", 5123321},
     {REGION_LOUISIANA, "http://louisiana.gov/", 8123321}
 }

Таким образом, я могу, например, получить доступ к данным URL, которые легко читаются и легко расширяются:

myRegions[REGION_HAWAII].url

Как мне выполнитьта же идея на Java?

Ответы [ 4 ]

2 голосов
/ 15 марта 2012

Я подозреваю, что вам нужно что-то вроде этого:

public enum Region {
    CALIFORNIA("california-url", 1),
    HAWAII("hawaii-url", 2),
    LOUISIANA("louisiana-url", 3);

    private String url;
    private int population;

    private Region(String url, int population) {
        this.url = url;
        this.population = population;
    }

    public int getPopulation() {
        return population;
    }

    public String url() {
        return url;
    }
}

Обратите внимание, что строковый URL, вероятно, должен исходить из внешнего ресурса.

1 голос
/ 15 марта 2012

Быстро и грязно:

public enum Region {
    CALIFORNIA, HAWAII, LOUISIANA
}

public class RegionData {
    public final Region region;
    public final String url;
    public final int population;
    public RegionData(Region region, String url, int population) {
        this.region = region;
        this.url = url;
        this.popuplation = population;
    }
}

…

Map<Region, RegionData> regionData = new HashMap<Region, RegionData>();
regionData.put(Region.CALIFORNIA, new RegionData(Region.CALIFORNIA, "http://http://california.gov/", 10123321));
…

System.out.println(regionData.get(Region.CALIFORNIA).url);

Но вы также можете использовать тот факт, что перечисления в Java также являются обычными классами.

public enum Region {
    CALIFORNIA("http://http://california.gov/", 10123321),
    HAWAII("http://hawaii.gov", 5123321),
    LOUISIANA("http://louisiana.gov/", 8123321);
    public final String url;
    public final int population;
    private Region(String url, int population) {
        this.url = url;
        this.population;
    }
}

…

System.out.println(Region.CALIFORNIA.url);
0 голосов
/ 15 марта 2012

Перечисления в Java на самом деле являются классами. Таким образом, вы можете делать с ними все, что захотите, за исключением нескольких вещей, таких как создание объектов во время выполнения.

0 голосов
/ 15 марта 2012

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

public enum Region
{
    REGION_CALIFORNIA,
    REGION_HAWAII,
    REGION_LOUISIANA;
}

public class RegionData
{
   Region region;
   String url;
   int    population;

   public RegionData(Region region, String url, int population)
   {
      this.region     = region;
      this.url        = url;
      this.population = population;
   }
}

Тогда вы захотите заглянуть в HashMap классов HashTable, чтобы получить нужные вам функции поиска:

http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html

http://docs.oracle.com/javase/7/docs/api/java/util/Hashtable.html

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