|
|
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть необходимость создать массив указателей на функции (в терминах C/С++) Задача описывается следующим образом – имеется визуальный компонент который отображает данные, получаемые из другого потока. В зависимости от предпочтений пользователя данные показываются по разному (рассчитываются сервисом). Раньше я реализовал это с использованием кучи if'ов. Решил создать класс WidgetParams – отвечающий за хранение всех доступных параметров и способов их расчета. Прошу обсудить мою реализацию: Смущает функция Bundle get() - в которой пришлось через if указать список классов поддерживаемых параметров. P.S. Android Java. С Уважением, Александ. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 17:33:26 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Если get() у каждого варианта геттера всегда одного типа, то так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Ну там впринципе тогда и get() не нужен, если это за рамки текущего класса не выходит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 17:52:36 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Лагман Спасибо! Да, у каждого варианта геттера всегда один и тот же тип. Предположим у меня 10 параметров типа String, получается что для 10 реализаций ParamGetter мну нужно повторить одинаковый метод Код: java 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:04:36 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Можно сделать абстрактные геттеры для типов, потом унаследовать от них. Но тут особо палку перегибать наверное тоже не стоит, а то и до абстрактной фабрики фабрик недалеко. А у Bundle нет случайно перегруженного метода put( с разными типами ) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:10:51 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
авторА у Bundle нет случайно перегруженного метода put( с разными типами ) ? К сожалению нет - а то зачем "огород городить". Был бы Bundle.putObject :( Есть putParcelable, и putSerializable, но зачем связываться если у меня нет "сложных" параметров объектов - только примитивные типы да String. android.os.Bundle: http://www.androidadb.com/source/pdn-slatedroid-read-only/eclair/frameworks/base/core/java/android/os/Bundle.java.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:19:19 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
А как Вы потом их получаете из Bundle - с помощью аналогичных геттеров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:27:50 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Данные передаются в другой процесс с помощью объекта Bundle При отображении данных я знаю что в текстовом поле 1 должно быть отображено значение параметра "PARAM1", и так далее. (То есть у меня есть шаблон отображаемых данных - в терминах Android - layout xml) Код: java 1. 2. R.id.info - Идентификатор текстового поля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:38:27 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Так может тогда String туда и класть? Все равно тип не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:40:28 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Или у вас String s = bundle.getString("PARAM1"); Double ss = bundle.getDouble("PARAM2"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:41:39 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
В принципе можно, потому что все потом "конвертируется" в String Но как же принцип - данные отдельно (в сервисе) - Отображение(форматирование) отдельно... Передача даты(через long) Код: java 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:47:35 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Опоздал :) Да Вы правы: String s = bundle.getString("PARAM1"); Double ss = bundle.getDouble("PARAM2"); Под словом "конвертируется" я имел ввиду, что в интерфейсе я использую только TextView - remoteView.setTextViewText(id, "какой-то текст"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:50:13 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
В общем, довел идиому ООП до абсурдности, увеличив код: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 18:57:29 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Вообще с if лучше было, а теперь получается у вас зависимость от Bundle в *Getter, а если делать адаптер Bundle-Getter то там или if, или внедрять обертку котороая пишет себя в Bundle (опять зависимость). А ещё можно нагромоздить рефлексией ). Может ъ-гуру подскажут как сделать правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 19:09:45 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
Да, забыл сказать есть параметр типа Boolean (передаваемые от сервиса к интерфейсу) который не отображается на прямую - он ответствен за то как отображается данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2012, 19:12:07 |
|
||
|
Массив указателей на функции (в терминах C/С++)
|
|||
|---|---|---|---|
|
#18+
> Есть необходимость создать массив указателей на функции (в терминах C/С++) > Задача описывается следующим образом – имеется визуальный компонент который > отображает данные, получаемые из другого потока. В зависимости от предпочтений > пользователя данные показываются по разному (рассчитываются сервисом). Раньше я > реализовал это с использованием кучи if'ов. Решил создать класс WidgetParams – > отвечающий за хранение всех доступных параметров и способов их расчета. > Смущает функция Bundle get() - в которой пришлось через if указать список Это один базовый абстрактрый интерфейс (класс с одними методами) и набор классов, реализующих этот интерфейс. А потом массив объектов типа этой базовый класс. Как раз позволяет уйти от такой порнографии, как у тебя в коде. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2012, 14:30:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37951545&tid=2130982]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
94ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 285ms |
| total: | 475ms |

| 0 / 0 |
