Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Подскажите по работе с enum'ами / 22 сообщений из 22, страница 1 из 1
19.11.2018, 13:47
    #39735126
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Здравствуйте, подскажите по такому вопросу: есть класс, который содержит 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
19.11.2018, 14:41
    #39735147
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
bobo96,
ну тут дженерики орут и просятся
...
Рейтинг: 0 / 0
19.11.2018, 17:08
    #39735240
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Слышал, даже прям чувствовал, что их юзать надо, но скилла ещё не хватает, мне бы примерчик)) Пожалуйста!
...
Рейтинг: 0 / 0
19.11.2018, 18:11
    #39735268
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
bobo96,
завтра на работе покажу)
...
Рейтинг: 0 / 0
19.11.2018, 22:39
    #39735354
cossack5
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
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
20.11.2018, 07:35
    #39735401
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Спасибо за ответ, но мне нужно вернуть именно сам enum, а не его константы.
Суть в чем: вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка. То-есть тут сама текущая константа, по-сути, вообще роли не играет, на item'е кликнули, я вижу, что тут enum ONE, ну и делаю уже что-то типа setIcon(ONE.C);
Надеюсь понятно объяснил))
...
Рейтинг: 0 / 0
20.11.2018, 08:45
    #39735409
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
bobo96Спасибо за ответ, но мне нужно вернуть именно сам enum, а не его константы.
Суть в чем: вообще у меня 3 enum'a, в которых по 3 одинаковых константы с ссылками на ресурсы (андроид). При клике на item в списке мне нужно знать, из какого enum'a ресурс, что бы поменять на другой из этого же списка. То-есть тут сама текущая константа, по-сути, вообще роли не играет, на item'е кликнули, я вижу, что тут enum ONE, ну и делаю уже что-то типа setIcon(ONE.C);
Надеюсь понятно объяснил))

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

вам не нужны енумы.
Понятно, что использование их не единственный способ, но, а) с ними удобно работать, б) мало опыта работы с ними, узнаю много нового))
Очень жду ответа по теме!
...
Рейтинг: 0 / 0
20.11.2018, 09:34
    #39735429
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
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
20.11.2018, 10:33
    #39735465
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Где-то в степиbobo96,
как то в голове не укладывается ход ваших мыслей,

Почему ?
...
Рейтинг: 0 / 0
20.11.2018, 11:09
    #39735483
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
bobo96,
не знаю, своим заняты, имхо енумы не для этого, да и под андроидом слышал что их не рекомендуют, или не?
...
Рейтинг: 0 / 0
20.11.2018, 11:35
    #39735497
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Где-то в степиbobo96,
не знаю, своим заняты, имхо енумы не для этого, да и под андроидом слышал что их не рекомендуют, или не?
Ну у меня опыта не так много, что бы рассуждать для этого они или нет)) Но раз второй человек уже об этом говорит, то следует задуматься конечно.
Насчет того, что не рекомендуют под андроидом, первый раз слышу.
Спасибо всем за помощь и подсказки!
...
Рейтинг: 0 / 0
20.11.2018, 12:00
    #39735515
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
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
20.11.2018, 12:09
    #39735525
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
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
20.11.2018, 12:10
    #39735526
bobo96
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
Блин, забыл в [JAVA][/JAVA] обернуть, извините!
...
Рейтинг: 0 / 0
20.11.2018, 14:03
    #39735626
alex55555
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите по работе с enum'ами
bobo96Переделал без enum'ов
Без enums - это плохой стиль. Ведро-архитекторы никогда не видели Java на момент зачатия своего дырявого ведра. Поэтому они тупо использовали то, что видели. А видели они одно единственное убожество в виде целочисленных констант, которые им разжевали, когда втискивали в их пустые мозги методы написания программ на голых сях (даже без плюсов). Ну и особо умные ведро-архитекторы вспомнили этот единственный знакомый им паттерн, когда нужно было как-то работать с константами. Только это не единственный в мире паттерн. И далеко не самый лучший. Это костыли, которые вынужденно применяют синяки, поскольку в сях просто других вариантов нет.

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

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

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



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

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

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

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



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

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

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


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


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