|
|
|
methods
|
|||
|---|---|---|---|
|
#18+
Есть интерфейс в котором за 50 методов Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить Есть ли более изящное(простое) решение чем использование рефлекшена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 08:21 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
А что сложного в reflection? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 10:23 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
LINUXERЕсть интерфейс в котором за 50 методов Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить Есть ли более изящное(простое) решение чем использование рефлекшена? if ... else if ... НУ остальное уже извращения можно например используя ClassLoader переписывая байт код загружать класс которы будет звать нужный метод. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 10:36 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
if () { } else if () { } else if () { ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 10:37 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
Евгений Путилин LINUXERЕсть интерфейс в котором за 50 методов Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить Есть ли более изящное(простое) решение чем использование рефлекшена? if ... else if ... НУ остальное уже извращения можно например используя ClassLoader переписывая байт код загружать класс которы будет звать нужный метод. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. где ифы? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 10:51 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
mozheyko_d... где ифы? ;-) ифы были предложены как альтернатива рефлекшну. есле кто не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 11:37 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
mozheyko_d public void runMethod(String className, String methodName, Object parameter ) ... Method theMethod = theClass.getMethod(methodName, parameter.getClass() ); theMethod.invoke(theObject, parameter ); ... а если количество параметров разное, и среди них есть int и float? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 11:46 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
mozheyko_dгде ифы? ;-) Ой, а что это за 512 эксепшинов лезут из мега простого метода? А как докапаться до эксепшина реально произошедшего в вызываемом методе? А как искать ошибки если изменится сигнатура одного из 50 методов? Откуда возьмуться Object[] params? Очень изящно... LINUXER Есть интерфейс в котором за 50 методов Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить Есть ли более изящное(простое) решение чем использование рефлекшена? Если методы имеют одинаковые сигнатуры и зависимость от строки простая, то лучше заменить один класс с 50 методами, на 50 классов с одним методом. Код: 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. Наличии различных сигнатур у методов усложняет ситуацию. Один из вариантов заключается в передаче в метод handle экземпляра класса ака provider/context позволяющего получить все необходимые параметры (в любом из 50 методов). Тут всё зависит от конкретной ситуации. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 11:56 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
??? mozheyko_d public void runMethod(String className, String methodName, Object parameter ) ... Method theMethod = theClass.getMethod(methodName, parameter.getClass() ); theMethod.invoke(theObject, parameter ); ... а если количество параметров разное, и среди них есть int и float? Параметры в методе Invoke передаются в массиве типа Object[], поэтому их может быть любое количество, при этом вместо примитивных типов передаются классы оболочки (Integer, Float) (но в getMethod() при описании типов параметров нужно использовать int.class/float.class). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 12:01 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
патч... Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 12:21 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs в getMethod() при описании типов параметров нужно использовать int.class/float.class а можно пример для методов: doA(int a, String b, float c); doB(int a, String b, Float c, Integer d); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 12:29 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
??? а можно пример для методов: doA(int a, String b, float c); doB(int a, String b, Float c, Integer d); Код: 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. 34. 35. 36. 37. 38. 39. "Integer d" h/w. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:19 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs ... Ой, а что это за 512 эксепшинов лезут из мега простого метода? это просто пример:) NotGonnaGetUs А как докапаться до эксепшина реально произошедшего в вызываемом методе? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. NotGonnaGetUs А как искать ошибки если изменится сигнатура одного из 50 методов? Проблема проектирования NotGonnaGetUs Откуда возьмуться Object[] params? ну это пример для одного параметра, можно массив передать. NotGonnaGetUs Очень изящно... ... ага, мне тоже нравится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:27 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsлучше заменить один класс с 50 методами, на 50 классов Думаю это в любом случае не оправдано :D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:31 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
mozheyko_d NotGonnaGetUs ... Ой, а что это за 512 эксепшинов лезут из мега простого метода? это просто пример:) Вот я и предлагаю дописать этот "простой" пример до готового решения и прикинуть, чем он лушче if-ов. mozheyko_d Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Во первых бедные checked exception's стали unchecked, а во вторых, не забываешь дописываешь "изящное решение" до рабочего состояния? mozheyko_d NotGonnaGetUs А как искать ошибки если изменится сигнатура одного из 50 методов? Проблема проектирования Ага. Называется "использование рефлекшина" и создана "изящным решением". mozheyko_d NotGonnaGetUs Откуда возьмуться Object[] params? ну это пример для одного параметра, можно массив передать. Ещё раз. Откуда возмётся значение для этого параметра? Не будет ли оно создаваться в тех же if-ах, от которых "изящное решение" должно было избавить? mozheyko_d NotGonnaGetUs Очень изящно... ... ага, мне тоже нравится Главное - это взаимопонимание :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:45 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
LINUXER NotGonnaGetUsлучше заменить один класс с 50 методами, на 50 классов Думаю это в любом случае не оправдано :D Чем 50 if else лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:45 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
mozheyko_d ну это пример для одного параметра, можно массив передать. NotGonnaGetUs вот и хотелось увидеть как будет выглядеть метод " public void runMethod(... " для таких методов doA(int a, String b, float c); doB(int a, String b, Float c, Integer d); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 13:58 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
??? mozheyko_d ну это пример для одного параметра, можно массив передать. NotGonnaGetUs вот и хотелось увидеть как будет выглядеть метод " public void runMethod(... " для таких методов doA(int a, String b, float c); doB(int a, String b, Float c, Integer d); Тот пример, что я привёл не подвластен зрению? http://sql.ru/forum/actualpost.aspx?bid=38&tid=335342&mid=3105053&p=1&act=quot#3104714 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:37 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUsТот пример, что я привёл не подвластен зрению? ))) в примере явное указание типов int.class, String.class, float.class. А как все это будет runMethod(String className, String methodName, Object[] parameter) разбирать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:57 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
??? NotGonnaGetUsТот пример, что я привёл не подвластен зрению? ))) в примере явное указание типов int.class, String.class, float.class. А как все это будет runMethod(String className, String methodName, Object[] parameter) разбирать? Очевидно, что никак не будет. Кроме methodName и Object[] нужно передавать Class[]. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 14:59 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs[quot ???][quot NotGonnaGetUs] Очевидно, что никак не будет. Кроме methodName и Object[] нужно передавать Class[]. На кой хер если class[] можно получить из объектов которые находятся в Object[]? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 16:07 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
Blazkowiczclass[] можно получить из объектов которые находятся в Object[] можно, только почему-то у меня так: кладу в Object[] (int, float), получаю (Integer, Float), где засада? Ваш код в студию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 16:16 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
???[quot Blazkowicz] ... кладу в Object[] (int, float) ... Ого. Это как так? Может отрабатывает приведение типов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 16:32 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
Blazkowicz NotGonnaGetUs[quot ???][quot NotGonnaGetUs] Очевидно, что никак не будет. Кроме methodName и Object[] нужно передавать Class[]. На кой хер если class[] можно получить из объектов которые находятся в Object[]? Чтобы не заморачиваться с примитивными типами. Выше уже говорили. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 16:44 |
|
||
|
methods
|
|||
|---|---|---|---|
|
#18+
Blazkowicz NotGonnaGetUs[quot ???][quot NotGonnaGetUs] Очевидно, что никак не будет. Кроме methodName и Object[] нужно передавать Class[]. На кой хер если class[] можно получить из объектов которые находятся в Object[]? Это можно сделать, только если в методе нет аргументов простых типов (int, etc). О чём, собственно, уже написали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2006, 17:57 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33969970&tid=2148174]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 342ms |

| 0 / 0 |
