Использовать объекты в Enum (в частности, в GWT) - PullRequest
2 голосов
/ 21 февраля 2012

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

Чтобы избежать жестко закодированных значений и поделиться с серверной частью, я создал Enum, назовем его TableEnum, поэтому Table Enum состоит из ключа и displayName,Который я тогда использую, чтобы заполнить мою компанию.Как только выбор сделан, я получил значение и поэтому должен получить место, куда можно пойти.Вот почему я создал фабрику, которая принимает значение выбора и возвращает объект Place.

Первое решение, которое я собирался сделать, - это преобразовать мое значение в объект TableEnum и выполнить переключатель / регистр, создавая правильное связанное Place..

Но я также думал о добавлении Места непосредственно в качестве поля моего Enum.Это позволило бы избежать переключения / случая, и мне нужно было бы только выполнить tableEnum.getPlace ().

Но я не совсем уверен, что это можно назвать хорошей практикой.В моей голове Enum были простыми объектами, которые не знали, что вокруг них.

Спасибо за информацию

Ответы [ 3 ]

4 голосов
/ 22 февраля 2012

Перечисления в Java - это не просто заполнители для целых чисел или просто некоторые константы (например, некоторые языки). Перечисления - это классы с фиксированным числом объектов, поэтому это хорошая практика, чтобы дать вашим перечислениям больше мозгов и всегда забывать о большом количестве if / else или * switch / случай * ы.

2 голосов
/ 22 февраля 2012

как у Дэнни Кирхмайера, но, возможно, меньше кода:

enum Table {
    first(Place.place1), second(Place.place2);
    Table(Place place) {
        this.place = place;
    }
    final Place place;
}

может быть, ваше место должно быть перечислением?

2 голосов
/ 22 февраля 2012

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

public enum TableEnum {
    FIRST(){
       public Place getPlace(){ return new FirstPlace(); }
    },
    SECOND(){
       public Place getPlace(){ return new SecondPlace(); }
    };

    public abstract Place getPlace();
}

Позже вы можете получить доступ к этому месту следующим образом:

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