|
|
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Коллеги, есть группа однотипных enum'ов такого плана: Код: java 1. 2. 3. 4. 5. 6. и есть такой вот метод, который пишет массив этих енумов в, допустим, json. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Суть проблемы в то, что toString() пишет "VALUE1" вместо "1". Мы, конечно, можем его переопределить и сделать Код: java 1. 2. 3. 4. НО: 1. начальство сказало, что не кошерно юзать toString() для небогоугодных целей. 2. и главное: иногда надо возвращать не String а int или на крайняк Integer. Посему хочется написать что-то типа: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Вопросы: 1. как изменить сигнатуру writeEnums() чтобы указать, чтобы там иметь возможность вызывать getValue()? 2. как-то можно это все облагородить? Выглядит код достаточно коряво. В частности, j.writeString(i.getValue()); придется заменять на j.writeInteger(i.getValue()); в случае интов, а соответственно, придется, видимо, делать методы writeEnumsAsString() и writeEnumsAsNumbers() (Разница в том, что в json значения должны уходить в кавычках или без в зависимости от типа). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 11:39:53 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Devider, Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 13:27:20 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Miha_S7, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 13:27:59 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Miha_S7, int getVal() это не совсем то что нужно. Метож может возвращать и стринг. Поэтому я и пишу public interface Jsonable<T> . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 15:32:39 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
А, там &..., а я запятую ставил.. )) В общем, метод стал: Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 15:44:08 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Ой, гоню я.. не то.. ( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 15:53:53 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Devider, вам надо что-то типа такого? Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 16:07:02 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Miha_S7, добавлю: и использовать полиморфизм для writeString() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 17:12:12 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Miha_S7, не, полиморфизм не сработает: Код: 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. почему - пока не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2012, 18:26:48 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
вообщем всё из-за такой штуки, как Type Erasure . Как раз из-за него нельзя делать полиморфные методы для generic типов. В связи с этим лучше всего переделать JCls: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. жаль, конечно, что нельзя все проверки в compile time перенести, зато обратная совместимость :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 13:40:52 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Спасибо большое. Последний, надеюсь, вопрос по этой теме. теперь обратная задача. Сделал метод Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. и оно работает. Далее надо парсить коллекцию этих енумов в EnumSet. Например Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. И ошибка выглядит так: Multiple markers at this line - Cannot cast from capture#2-of ? extends Class to T - Bound mismatch: The generic method parseEnum(Class<T>, String) of type AbstractDeserializer is not applicable for the arguments (Class<capture#2-of ? extends Class>, String). The inferred type capture#2-of ? extends Class is not a valid substitute for the bounded parameter <T extends Enum<T> & Jsonable<?>> Собственно, что вообще имеется ввиду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:54:52 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
[quot Devider] Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. clazz.getClass() - clazz уже типа Class ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 16:03:53 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Miha_S7, Туплю. Еще раз большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 16:10:14 |
|
||
|
Перечесляемые типы, наследование.
|
|||
|---|---|---|---|
|
#18+
Devider, и там коммент ещё пропустил: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 16:37:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37635477&tid=2132676]: |
0ms |
get settings: |
11ms |
get forum list: |
23ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
53ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
| others: | 349ms |
| total: | 536ms |

| 0 / 0 |
