|
|
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Возможно ли с помощью enum реализовать следующее поведение. Предположим, что у нас есть некоторое множество значений - результаты прогноза (1, X, 2 - победа, ничья, поражение). И есть более широкое множество - Результаты реального матча (1, Х, 2, перенесен, отменен, отложен, результат не учитывается...) Желание связано с тем, что поля, содержащие прогноз, должны быть ограничены в значениях (нельзя прогнозировать перенесение или отмену матча), но с другой стороны хотелось бы иметь возможность сравнивать поле прогноза и поле реального результата без дополнительных усилий (т.е. специально написанных для этого методов). enum наследовать нельзя. Перекрыть метод equals тоже - он final. Отсюда и вопрос - как? 1. писать myEquals - немного не красиво как-то 2. забить на enum и писать собственный класс для реализации перечислимого типа - не логично - из-за некрасивости первого пункта писать полностью свой класс. Как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 19:08:28 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Как на счет такого варианта? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2006, 19:28:51 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Извиняюсь за назойливость. Можно пояснения? Не совсем понял, как это применить. Сам класс TestSubEnum является полным набором. Я могу сделать в каком-нибудь классе поле этого типа. А вот что делать с subEnum? Он возвращает разрешенный набор для подмножества, но что с ним делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 01:07:48 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
А что ты хочешь с ним делать? Он же тебе для чего-то понадобился? Константы ты можешь использовать из исходного энума, а итернацию по массиву подмножеству, какая тебе ещё функциональность нужна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 09:44:44 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА что ты хочешь с ним делать? Он же тебе для чего-то понадобился? Константы ты можешь использовать из исходного энума, а итернацию по массиву подмножеству, какая тебе ещё функциональность нужна? Я хочу иметь поле такого типа, который не позволит мне присвоить ему "невозможное" значение. Ну чисто для красоты. Так-то я и int мог бы использовать, но вот захотелось красивого. Есть у меня одна мысль (вычитал про один паттерн), я ее попробую, если получится - здесь выложу. Там без enum. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 11:14:35 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamirЯ хочу иметь поле такого типа, который не позволит мне присвоить ему "невозможное" значение. Ну чисто для красоты. Да, и при этом позволит без усилий сравнивать значения с более широким множеством. Фактически, как я уже писал в первом сообщении - есть множество А, которая является подмножеством Б. Вот я и хочу получить класс А и класс Б, чтобы можно было делать поля таких типов. Наверное, это больше теоретическая заморочка, чем практическая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 11:17:13 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Вот вариант - подчерпнул из главы Замена перечислений классами Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. В принципе, работает, за одним недостатком (если его можно так назвать) - для класса, который будет обслуживать матчи (т.е. класс, который может содержать более широкий диапазон значений), поле результата нужно все равно делать типа PrognozResult иначе возникает ошибка преобразования класса, для первых 3х значений. Кажется, это не является недостатком - просто все поля идут корневым классом. Все верно или где-то я что-то не заметил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 12:35:41 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamirВсе верно или где-то я что-то не заметил? Какая-то неоднозначная реализация энумов. А как по ним итерироватся и все такое? Возьми лучше что-нибудь из Jakarta Commons Lang: org.apache.commons.lang.enums.* ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 12:43:17 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Эээ... А зачем мне по ним итерироваться? И как итерироваться по обычному enum? Не нашел у него никаких методов для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 13:05:37 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamirВсе верно или где-то я что-то не заметил? И тут до меня дошло, что я ничего этим не добился. Поле типа PrognozResult может содержать в себе значения и дочернего класса PrognozResult, что вполне логично. Так что задача не решена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 18:52:45 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
"дочернего класса PrognozResult" читать как "дочернего класса MatchResult" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2006, 18:53:58 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamir pamirВсе верно или где-то я что-то не заметил? И тут до меня дошло, что я ничего этим не добился. Поле типа PrognozResult может содержать в себе значения и дочернего класса PrognozResult, что вполне логично. Так что задача не решена. Не понял - в каком случае может содержать? По-моему хороший вариант, для описанной желаемой функциональности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 06:15:47 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
LINUXER pamirИ тут до меня дошло, что я ничего этим не добился. Поле типа PrognozResult может содержать в себе значения и дочернего класса PrognozResult, что вполне логично. Так что задача не решена. Не понял - в каком случае может содержать? По-моему хороший вариант, для описанной желаемой функциональности Идея была в следующем (на примере) Класс MyPrognozHolder - содержит прогнозы матчей. Его поля должны быть такого типа, которые не позволят присвоить им ничего кроме Победа, ничья, Поражение (т.е. типа PrognozResult). Класс MyRealResultsHolder - содержит реальные результаты матчей - его поля должны быть такого типа, который позволяет присваивать не только Победа, ничья, Поражение, но и Отменен, Перенесен, Не Учитывать (т.е. типа MatchResult). При этом хотелось бы, чтобы их можно было сравнивать без спец. преобразований. Приведенное мной решение состоит из класса PrognozResult и унаследованного от него MatchResult. Такое положение позволяет присвоить полям с типом PrognozResult все! значения, которые возможны в MatchResult: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. В итоге я решил делать проверку в самом классе (в примере это MyPrognozHolder) в методе set для соответствующего поля. PS. А приведенное мной решение полезное, но для других целей. Для расширяемых перечислительных типов, но когда не стоит требование ограничений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 11:30:40 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamir Код: plaintext 1. 2. точно=)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 12:07:16 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
Кстати, подумалось - так как у enum нельзя перекрыть метод equals, то если очень хотеть все-таки решить задачу, можно сделать классы PrognozResult и MatchResult независимыми, и в каждом реализовать метод equals. И почему я сразу об этом не подумал? :о) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 12:31:59 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamirКстати, подумалось - так как у enum нельзя перекрыть метод equals, то если очень хотеть все-таки решить задачу, можно сделать классы PrognozResult и MatchResult независимыми, и в каждом реализовать метод equals. И почему я сразу об этом не подумал? :о) Тихо сам с собою... я же никому не мешаю :)) Такой вариант возможен, но для частного случая. Он работает, но если вдруг появится еще какой-то набор значений (трудно привести пример для прогнозов, но если это другая область применения, то можно), то эти классы не сумеют с ним сравниваться.... Так что решение половинчатое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 13:52:32 |
|
||
|
enum - подмножества для множества.
|
|||
|---|---|---|---|
|
#18+
pamirТихо сам с собою... я же никому не мешаю :)) Ты пытаешься смешать разные понятия в одну кучу. Будь проще: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2006, 15:25:51 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34149759&tid=2147412]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 425ms |

| 0 / 0 |
