Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / enum. как ассоциировать число со значением enum-а ? / 21 сообщений из 21, страница 1 из 1
18.02.2013, 19:36:23
    #38156341
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Есть Enum. у него есть переменная(параметр конструктора).
по значению enum-а не составляет труда получить это число. а чтобы наоборот по значению получить enum без каких то конструкций ветвления.

например есть enum
вася(1)
петя(2)


по 2 надо уметь получать петя
...
Рейтинг: 0 / 0
18.02.2013, 19:37:11
    #38156342
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
redwhite90,

у енума есть волшебный метод values()
...
Рейтинг: 0 / 0
18.02.2013, 19:41:04
    #38156345
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
redwhite90,

Если число это не порядковый номер, то просто создаёшь новый статический метод byNumber в котором перебираешь все значения и находишь то которое подходит.
...
Рейтинг: 0 / 0
18.02.2013, 19:46:33
    #38156350
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
забыл ник,

классный метод)

Blazkowicz

спасибо. Думал может проще что есть.
...
Рейтинг: 0 / 0
18.02.2013, 19:49:04
    #38156355
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Blazkowicz,

а если порядковый?
...
Рейтинг: 0 / 0
18.02.2013, 19:50:45
    #38156357
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
redwhite90Думал может проще что есть.
Куда уж проще???
...
Рейтинг: 0 / 0
18.02.2013, 19:51:04
    #38156358
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
redwhite90Blazkowicz,

а если порядковый?
values()[i] не?
...
Рейтинг: 0 / 0
18.02.2013, 19:54:02
    #38156360
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Blazkowiczredwhite90Blazkowicz,

а если порядковый?
values()[i] не?

Кстати не особо хороший вариант. Сколько раз уже сталкивался то удалишь из енума, то ошибешься в номере - и валятся нуллпоинтеры, все-таки выделенный метод который итерируется по values() и сравнивает по идентификатору лучше
...
Рейтинг: 0 / 0
18.02.2013, 19:54:21
    #38156361
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Blazkowicz,

Всё, спасибо, понял.
...
Рейтинг: 0 / 0
18.02.2013, 20:03:57
    #38156371
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
забыл никКстати не особо хороший вариант. Сколько раз уже сталкивался то удалишь из енума, то ошибешься в номере - и валятся нуллпоинтеры, все-таки выделенный метод который итерируется по values() и сравнивает по идентификатору лучше
Так индексы индексы нельзя ни хранить ни хардкодить конечно же. Если нужна ссылка на энум, то только на имя, а не на индекс нужно закладываться.
...
Рейтинг: 0 / 0
18.02.2013, 23:01:51
    #38156529
Adva
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
import java.util.HashMap;
import java.util.Map;

/**
 *
 */
public enum Test {

    TEST_1(1),
    TEST_2(2);

    private final int value;

    private Test(int value) {
        this.value = value;
        Holder.VALUES.put(value, this);
    }

    public int getValue() {
        return value;
    }

    public static Test get(int value) {
        return Holder.VALUES.get(value);
    }


    private static class Holder {

        private static final Map<Integer, Test> VALUES = new HashMap<Integer, Test>();
    }
}
...
Рейтинг: 0 / 0
18.02.2013, 23:10:31
    #38156535
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
трэш
...
Рейтинг: 0 / 0
18.02.2013, 23:55:50
    #38156571
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
забыл ник,

и угар
...
Рейтинг: 0 / 0
18.02.2013, 23:56:10
    #38156573
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
забыл ник,

но тоже вариант
...
Рейтинг: 0 / 0
19.02.2013, 02:36:35
    #38156672
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Самой быстрой будет наверно реализация на свитче:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
    public static BlahBlah getByValue(int value) {
        switch (value) {
        case 1: return вася;
        case 2: return петя;    
        default:
            throw new IllegalArgumentException();
        }
    }


Она конечна нарушает Open/closed principle, но если запастись хорошим тестом то думаю ничего страшного при рефакторингах не случится:
Код: java
1.
2.
3.
4.
5.
6.
    @Test
    public void testGetByValue() {
        for (BlahBlah blah : BlahBlah.values()) {
            assertEquals(blah, BlahBlah.getByValue(blah.getValue()));
        }
    }
...
Рейтинг: 0 / 0
19.02.2013, 03:37:07
    #38156684
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
Точно угар и содомия. Здесь полезной инфы ровно столько
Код: java
1.
2.
TEST_1(1),
TEST_2(2);

Всё остальное - болванка. Но джависты всегда славились умением
плодить ненужные декларации.
...
Рейтинг: 0 / 0
19.02.2013, 12:14:33
    #38157144
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
maytonТочно угар и содомия. Здесь полезной инфы ровно столько
Код: java
1.
2.
TEST_1(1),
TEST_2(2);

Всё остальное - болванка. Но джависты всегда славились умением
плодить ненужные декларации.

можно разъяснить?

когдато делал так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
    private enum Directorate {
        /*
        Дирекция выдачи проекта приказа/приказа:
        1-Дирекция тяги (Т)
        2-Дирекция управления движением (Д).
        3-Дирекция по ремонту (ТР)
        */

		 T(1), D(2), TR(3);

		 private int code;

		 private Directorate(int c) {
		   code = c;
		 }

	    static public Directorate getType(int dType) {
	        for (Directorate type: Directorate.values()) {
	            if (type.getCode()==(dType)) {
	                return type;
	            }
	        }
	        throw new RuntimeException("unknown type");
	    }

	    static public Directorate getType(String dType) {
	        for (Directorate type: Directorate.values()) {
	            if (type.getCode()==(Integer.parseInt(dType))) {
	                return type;
	            }
	        }
	        throw new RuntimeException("unknown type");
	    }

		 public int getCode() {
		   return code;
		 }
    }
...
Рейтинг: 0 / 0
19.02.2013, 12:37:29
    #38157183
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
silvanmaytonТочно угар и содомия. Здесь полезной инфы ровно столько
Код: java
1.
2.
TEST_1(1),
TEST_2(2);

Всё остальное - болванка. Но джависты всегда славились умением
плодить ненужные декларации.

можно разъяснить?

когдато делал так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
    private enum Directorate {
        /*
        Дирекция выдачи проекта приказа/приказа:
        1-Дирекция тяги (Т)
        2-Дирекция управления движением (Д).
        3-Дирекция по ремонту (ТР)
        */

		 T(1), D(2), TR(3);

		 private int code;

		 private Directorate(int c) {
		   code = c;
		 }

	    static public Directorate getType(int dType) {
	        for (Directorate type: Directorate.values()) {
	            if (type.getCode()==(dType)) {
	                return type;
	            }
	        }
	        throw new RuntimeException("unknown type");
	    }

	    static public Directorate getType(String dType) {
	        for (Directorate type: Directorate.values()) {
	            if (type.getCode()==(Integer.parseInt(dType))) {
	                return type;
	            }
	        }
	        throw new RuntimeException("unknown type");
	    }

		 public int getCode() {
		   return code;
		 }
    }


примерно так и надо
...
Рейтинг: 0 / 0
19.02.2013, 13:23:07
    #38157284
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
silvan, это на 99% синтетический код. Он занимает много букв
но генерится визардом. Если ты напишешь еще штук 20 таких
enum-сов тебя задолбает такая избыточность (ведь это всё надо
коммитить куда-то и поддерживать). Возникает мысль а нельзя-ли
было на уровне языка или макропроцессора организовать enum?
Один уровень уже организовали. Enum это и есть макрос. Это
по сути класс наследующий какой-то базовый enum. Но то как
его организовали - у меня вызывает большое удивление.

И чего достигли?
...
Рейтинг: 0 / 0
19.02.2013, 14:05:48
    #38157376
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
redwhite90Есть Enum. у него есть переменная(параметр конструктора).
по значению enum-а не составляет труда получить это число. а чтобы наоборот по значению получить enum без каких то конструкций ветвления.

например есть enum
вася(1)
петя(2)
по 2 надо уметь получать петя
может задача наоборот?
Код: java
1.
2.
3.
1=вася
2=петя
33=лох


по 2 надо уметь получать петя
?
...
Рейтинг: 0 / 0
19.02.2013, 14:56:41
    #38157470
silvan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
enum. как ассоциировать число со значением enum-а ?
mayton,понятно,спсб.

в С++;С# чисто внешне не отличаются,
а с 1.5 есть и в Java%)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / enum. как ассоциировать число со значением enum-а ? / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]