powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите по работе с enum'ами
22 сообщений из 22, страница 1 из 1
Подскажите по работе с enum'ами
    #39735126
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите по такому вопросу: есть класс, который содержит 2,3 ... n enum'ов с одинаковыми константами и разными значениями.
Создаем несколько экземпляров класса для работы, устанавливаем некий параметр с помощью нужного enum'a. Тут вопросов нет.
Вопросы возникают тогда, когда надо взять любой из этих созданных экземпляров класса и изменить значение на константу из своего же enum'a.
В примере getAnEnum() возвращает A и B соответственно, а как вернуть ONE и TWO, что бы можно было обращаться к их константам ?
Заранее благодарю!


Код: 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.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
public class CyberForum {

    public static void main(String[] args) {

        List<Test> list = new ArrayList<>();

        list.add(new Test(Test.ONE.A));
        list.add(new Test(Test.TWO.B));

        for (Test item : list) {

            System.out.println(item.getAnEnum());

        }

    }

}

class Test {

    private Enum anEnum;
    private int id;

    enum ONE {
        A(1),
        B(2),
        C(3);
        private int id;
        ONE(int id) {
            this.id = id;
        }
        public int getId() {
            return this.id;
        }
    }

    enum TWO {
        A(10),
        B(20),
        C(30);
        private int id;
        TWO(int id) {
            this.id = id;
        }
        public int getId() {
            return this.id;
        }
    }

    public Test(Enum anEnum) {
        this.anEnum = anEnum;
        this.id = getIdFromEnum(anEnum);
    }

    private int getIdFromEnum(Enum idEnum) {

        int id = 0;

        if(idEnum instanceof ONE) {
            id = ((ONE) idEnum).getId();
        }
        else if(idEnum instanceof TWO) {
            id = ((TWO) idEnum).getId();
        }

        return id;
    }

    int getId() {
        return id;
    }

    void setId(Enum anEnum) {
        this.id = getIdFromEnum(anEnum);
    }

    public Enum getAnEnum() {
        return anEnum;
    }
}


...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735147
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96,
ну тут дженерики орут и просятся
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735240
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слышал, даже прям чувствовал, что их юзать надо, но скилла ещё не хватает, мне бы примерчик)) Пожалуйста!
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735268
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96,
завтра на работе покажу)
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735354
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96 а как вернуть ONE и TWO, что бы можно было обращаться к их константам


Можно вернуть Class и у него дергать getEnumConstants
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public Class<? extends Enum> getAnEnum() {
        return anEnum.getClass();
    }

for (Test item : list) 
{
      if (item.getAnEnum().getEnumConstants()==null) continue;
      Arrays.stream(item.getAnEnum().getEnumConstants()).forEach(System.out::println);
 }
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735401
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, но мне нужно вернуть именно сам enum, а не его константы.
Суть в чем: вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка. То-есть тут сама текущая константа, по-сути, вообще роли не играет, на item'е кликнули, я вижу, что тут enum ONE, ну и делаю уже что-то типа setIcon(ONE.C);
Надеюсь понятно объяснил))
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735409
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96Спасибо за ответ, но мне нужно вернуть именно сам enum, а не его константы.
Суть в чем: вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка. То-есть тут сама текущая константа, по-сути, вообще роли не играет, на item'е кликнули, я вижу, что тут enum ONE, ну и делаю уже что-то типа setIcon(ONE.C);
Надеюсь понятно объяснил))

вам не нужны енумы.
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735411
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверинbobo96Спасибо за ответ, но мне нужно вернуть именно сам enum, а не его константы.
Суть в чем: вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка. То-есть тут сама текущая константа, по-сути, вообще роли не играет, на item'е кликнули, я вижу, что тут enum ONE, ну и делаю уже что-то типа setIcon(ONE.C);
Надеюсь понятно объяснил))

вам не нужны енумы.
Понятно, что использование их не единственный способ, но, а) с ними удобно работать, б) мало опыта работы с ними, узнаю много нового))
Очень жду ответа по теме!
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735429
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96,
как то в голове не укладывается ход ваших мыслей,
ну да ладно

Код: 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.
public class Main {

    public static void main(String[] args) {
        List<Test> list = new ArrayList<>();
        list.add(new Test(Test.ONE.values()));
        list.add(new Test(Test.TWO.values()));
        for (Test item : list) {
         Object[] s= (Object[]) item.getAnEnum();
            for (Object o : s) {
                System.out.printf("%s -- %s\n",item.getAnEnum().toString(),o);
            }
            System.out.println("*************************************");
        }
    }
}
class Test <T >{
    private T anEnum;
    enum ONE {
        A(1),
        B(2),
        C(3);
        ONE(int i) { }
    }
    enum TWO {
        A(10),
        B(20),
        C(30);
        TWO(int i) { }
    }
    public  Test(T anEnum) {
        this.anEnum = anEnum;
    }
    public T getAnEnum() {
        return anEnum;
    }
}


...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735465
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиbobo96,
как то в голове не укладывается ход ваших мыслей,

Почему ?
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735483
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96,
не знаю, своим заняты, имхо енумы не для этого, да и под андроидом слышал что их не рекомендуют, или не?
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735497
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Где-то в степиbobo96,
не знаю, своим заняты, имхо енумы не для этого, да и под андроидом слышал что их не рекомендуют, или не?
Ну у меня опыта не так много, что бы рассуждать для этого они или нет)) Но раз второй человек уже об этом говорит, то следует задуматься конечно.
Насчет того, что не рекомендуют под андроидом, первый раз слышу.
Спасибо всем за помощь и подсказки!
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735515
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка.
Вот с этого и нужно было начинать.

На, держи:
Код: 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.
enum E { E1,E2,E3 }

class Item
{
	private E e;
	public Item(E e)
	{ this.e=e; }
	public E onClick() { return e; }
}

class Test
{
	private final static int itemNumber=123456;
	private final static int indexes[][]=new int[3][itemNumber];

	public static void main(String args[])
	{
		Item i1= new Item(E.E1);
		Item i2= new Item(E.E2);
		Item i3= new Item(E.E1);
		Item i4= new Item(E.E3);
		Item i5= new Item(E.E3);
		Item i6= new Item(E.E1);
		System.out.println(indexes[i1.onClick().ordinal()]);
		System.out.println(indexes[i2.onClick().ordinal()]);
		System.out.println(indexes[i3.onClick().ordinal()]);
		System.out.println(indexes[i4.onClick().ordinal()]);
		System.out.println(indexes[i5.onClick().ordinal()]);
		System.out.println(indexes[i6.onClick().ordinal()]);

	}
}
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735525
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex55555bobo96вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка.
Вот с этого и нужно было начинать.

На, держи:
Спасибо!
Переделал без enum'ов, имеет право на жизнь такое решение:

public abstract class IconConstructor {

protected IconConstructor() {
}

public static Fabric createFabricInstance() {
return new Fabric();
}

public static Office createOfficeInstance() {
return new Office();
}

public static Home createHomeInstance() {
return new Home();
}

public abstract int getIcon();
public abstract int getBLUE();
public abstract int getGREY();
public abstract int getRED();
public abstract int getWHITE();

}

public class Fabric
extends IconConstructor {

private final int BLUE = R.drawable.ic_factory_blue;
private final int GREY = R.drawable.ic_factory_grey;
private final int RED = R.drawable.ic_factory_red;
private final int WHITE = R.drawable.ic_factory_white;

private int icon;

public Fabric(int icon) {
super();
this.icon = icon;
}

public Fabric() {
super();
this.icon = GREY;
}


@Override
public int getIcon() {
return this.icon;
}

@Override
public int getBLUE() {
return BLUE;
}

@Override
public int getGREY() {
return GREY;
}

@Override
public int getRED() {
return RED;
}

@Override
public int getWHITE() {
return WHITE;
}
}

// + еще 2 таких же аналогичных класса
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735526
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин, забыл в [JAVA][/JAVA] обернуть, извините!
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735626
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96Переделал без enum'ов
Без enums - это плохой стиль. Ведро-архитекторы никогда не видели Java на момент зачатия своего дырявого ведра. Поэтому они тупо использовали то, что видели. А видели они одно единственное убожество в виде целочисленных констант, которые им разжевали, когда втискивали в их пустые мозги методы написания программ на голых сях (даже без плюсов). Ну и особо умные ведро-архитекторы вспомнили этот единственный знакомый им паттерн, когда нужно было как-то работать с константами. Только это не единственный в мире паттерн. И далеко не самый лучший. Это костыли, которые вынужденно применяют синяки, поскольку в сях просто других вариантов нет.

Enum - это хоть и маленький, но шаг к декларативному программированию. И если ведро-архитекторы не способны даже на такой микроскопический шаг, это не значит, что все остальные тоже должны использовать такой же гнилой рецепт.
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735688
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot bobo96]Где-то в степиbobo96,
Насчет того, что не рекомендуют под андроидом, первый раз слышу.

https://stackoverflow.com/questions/29183904/should-i-strictly-avoid-using-enums-on-android
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735697
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bobo96, попробуйте так, конечно:

Код: java
1.
item.getAnEnum().getClass().getEnumConstants()



Но у меня ощущение, что вы что-то делаете не так.
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735700
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex55555bobo96Переделал без enum'ов
Без enums - это плохой стиль. Ведро-архитекторы никогда не видели Java на момент зачатия своего дырявого ведра. Поэтому они тупо использовали то, что видели. А видели они одно единственное убожество в виде целочисленных констант, которые им разжевали, когда втискивали в их пустые мозги методы написания программ на голых сях (даже без плюсов). Ну и особо умные ведро-архитекторы вспомнили этот единственный знакомый им паттерн, когда нужно было как-то работать с константами. Только это не единственный в мире паттерн. И далеко не самый лучший. Это костыли, которые вынужденно применяют синяки, поскольку в сях просто других вариантов нет.

Enum - это хоть и маленький, но шаг к декларативному программированию. И если ведро-архитекторы не способны даже на такой микроскопический шаг, это не значит, что все остальные тоже должны использовать такой же гнилой рецепт.

очередной мутный поток.
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735769
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Озверинbobo96, попробуйте так, конечно:

Код: java
1.
item.getAnEnum().getClass().getEnumConstants()



Но у меня ощущение, что вы что-то делаете не так.
Вариант с классами лучше ?)) Тот, что я скинул.
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39735770
bobo96
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Где-то в степи]bobo96пропущено...

https://stackoverflow.com/questions/29183904/should-i-strictly-avoid-using-enums-on-android
За 15й год тема какбэ.. Столько воды уже утекло)
...
Рейтинг: 0 / 0
Подскажите по работе с enum'ами
    #39736183
alex55555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверинbobo96, попробуйте так, конечно:

Код: java
1.
item.getAnEnum().getClass().getEnumConstants()


Но у меня ощущение, что вы что-то делаете не так.
А у меня ощущение, что данный советчик не знает базовый API Java. Тот же код нужно(!) писать с одной точкой, двумя словами и двумя скобками. Но советчик же не читатель, а исключительно пейсатель.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите по работе с enum'ами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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