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

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


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

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

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

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

Blazkowicz

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

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

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

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

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

Всё, спасибо, понял.
...
Рейтинг: 0 / 0
enum. как ассоциировать число со значением enum-а ?
    #38156371
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никКстати не особо хороший вариант. Сколько раз уже сталкивался то удалишь из енума, то ошибешься в номере - и валятся нуллпоинтеры, все-таки выделенный метод который итерируется по values() и сравнивает по идентификатору лучше
Так индексы индексы нельзя ни хранить ни хардкодить конечно же. Если нужна ссылка на энум, то только на имя, а не на индекс нужно закладываться.
...
Рейтинг: 0 / 0
enum. как ассоциировать число со значением enum-а ?
    #38156529
Adva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
enum. как ассоциировать число со значением enum-а ?
    #38156535
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трэш
...
Рейтинг: 0 / 0
enum. как ассоциировать число со значением enum-а ?
    #38156571
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

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

но тоже вариант
...
Рейтинг: 0 / 0
enum. как ассоциировать число со значением enum-а ?
    #38156672
vimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самой быстрой будет наверно реализация на свитче:
Код: 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
enum. как ассоциировать число со значением enum-а ?
    #38156684
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно угар и содомия. Здесь полезной инфы ровно столько
Код: java
1.
2.
TEST_1(1),
TEST_2(2);

Всё остальное - болванка. Но джависты всегда славились умением
плодить ненужные декларации.
...
Рейтинг: 0 / 0
enum. как ассоциировать число со значением enum-а ?
    #38157144
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
enum. как ассоциировать число со значением enum-а ?
    #38157183
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
enum. как ассоциировать число со значением enum-а ?
    #38157284
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
silvan, это на 99% синтетический код. Он занимает много букв
но генерится визардом. Если ты напишешь еще штук 20 таких
enum-сов тебя задолбает такая избыточность (ведь это всё надо
коммитить куда-то и поддерживать). Возникает мысль а нельзя-ли
было на уровне языка или макропроцессора организовать enum?
Один уровень уже организовали. Enum это и есть макрос. Это
по сути класс наследующий какой-то базовый enum. Но то как
его организовали - у меня вызывает большое удивление.

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

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


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

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


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