
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
25.08.2014, 08:35
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
есть класс в нем Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. это лучше, чем городить if или switch, т.к. вызываемых методов прилично. количество вызываемых методов растёт, есть желание разделить их на логические группы, а эти группы поместить в разные файлы но как это можно реализовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 09:21
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадяэто лучше, чем городить if или switch, т.к. вызываемых методов прилично. Зато типобезопасность идёт лесом. Лучше было использовать полиморфизм. На худой конец - HashMap. Тем более с лямбдами сейчас это очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 09:37
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
Blazkowiczвадяэто лучше, чем городить if или switch, т.к. вызываемых методов прилично. Зато типобезопасность идёт лесом. Лучше было использовать полиморфизм. На худой конец - HashMap. Тем более с лямбдами сейчас это очень просто. соглашусь, но сейчас вопрос не об этом. а как разнести методы по разным файлам (классам?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 09:40
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадяа как разнести методы по разным файлам (классам?) Ctrl+X, Ctrl+V ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 09:54
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
Blazkowicz, шутник, как вызывать из одного класса - методы из разных классов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 10:02
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадяшутник, Какой вопрос, такой и ответ. вадякак вызывать из одного класса - методы из разных классов? Вероятно, вместо this.getClass() нужно использовать ссылку на класс, в котором находится метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 10:41
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадя, Я вот теряюсь в догадках, Вы что эмулируете, JMS или RPC? Колеса уж очень квадратные.... Кто вызывает вот этот метод onMessage? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 10:42
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
делаю Код: java 1. 2. 3. на последней строке выдаёт java.lang.IllegalArgumentException: object is not an instance of declaring class ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 10:44
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
HoBTID, это вызывает WebSocketServer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 10:45
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадяделаю Код: java 1. 2. 3. на последней строке выдаёт java.lang.IllegalArgumentException: object is not an instance of declaring class В этой строке: method.invoke(cl, args); 1-й параметр должен быть объектом, а не классом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 11:20
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
сделал так Код: java 1. 2. 3. 4. работает. но смущает вот это Object objCl = cl.newInstance(); насколько затратная операция? зачем её делать многократно, можно ли (будет ли быстрее) как-то вставить её в Singleton? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 11:32
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадянасколько затратная операция? В переиспользовании экземпляров нужно соблюдать баланс между количеством долгоживущих объектов, которые влияют на производительность GC и затратами на создание новых экземпляров. У вас высоконагруженая обработка сообщений? Если проект взлетит, то потомки вас будут проклинать за рефлексию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 11:33
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадячем городить if или switch если "городить" - это всё, что не нравится. То напиши через if или switch ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 11:35
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадя, ООП в разруливании сообщений не нужен. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 13:19
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
Petro123вадячем городить if или switch если "городить" - это всё, что не нравится. То напиши через if или switch если цепочка из 100 if - номально, то.... да и добавлять нужно будет и в if и метод, так я добавляю только метод. авторЕсли проект взлетит, то потомки вас будут проклинать за рефлексию. чем рефлексия тормознута? и чем её можно заменить? методов для выполнения ожидается много. if и switch при >100 методов будет тоже не быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 13:23
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадя, > 100 if бест-практик. Я задавал этот вопрос у чела из MS. Он сказа что в самой MS портянки на события очень большие. Это не БЛ, а переключатели. Это нормально. Удачи! PS. Можно разделить обработчики на 4 простыни из категорий событий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 13:32
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
if и switch работают последовательным проходом и сравнением как работает рефлексия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 13:34
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
Напрашивается паттерн "команда" + хеш-таблица. А с рефлексией, кроме всего прочего, есть еще и вопросы безопасности. Например, если указанный метод предназначен для работы в web, то с клиента могут прийти не только разрешенные команды, а и вообще вызов любого публичного метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 13:41
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
авторНапрашивается паттерн "команда" + хеш-таблица. более подробно можно? если про web - то я могу занести все разрешенные методы в array (к примеру) и вызывать только их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 14:05
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
вадязанести все разрешенные методы в array (к примеру) и вызывать только их. они уже там есть при рефлексии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 14:51
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадяавторНапрашивается паттерн "команда" + хеш-таблица. более подробно можно? если про web - то я могу занести все разрешенные методы в array (к примеру) и вызывать только их. 1) во-первых, 100 методов - декомпозиция неизбежна. Паттерн "команда" предлагает безкомпромиссную декомпозицию - на каждую команду создается отдельный класс. Для этого описываем интерфейс примерно такого вида: Код: java 1. 2. 3. и создаем 100 простейших классов, реализующих этот интерфейс. Необходимо добавить новую команду - просто добавляем новый класс, не торгая всё остальное 2) в методе onMessage пролучив на входе символьную команду, надо как-то получить соответствующий ей объект и выполнить метод execute() этого объекта. Тут все зависит от прочих условий - Например, можно заранее создать таблицу и при старте поместить в нее сконструированные объекты Map<String,ICommand>. На момент выполнения вызываем Код: java 1. - Если есть проблемы с памятью, то можно поместить в таблицу классы Map<String,Class<ICommand>> и создавать объект только на время выполнения команды: Код: java 1. - можно использовать готовый механизм работы с бинами, например, спринг начальное заполнение таблицы - тоже много вариантов. - забить всё в коде - сканировать определенные пакеты - использовать ресурс с именами классов - и т.д. Если хотим избежать жесткого кодирования, то почти во всех вариантах будет использована рефлексия, хотя и достаточно "ленивая" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 15:01
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
ivanra, не для флейма, а как контраргумент. Т.к. if или ООП шансы равнозначны. - 100 классов это не меньше 100 if константа - шаблон комманда часто применяют в ГУИ напр. на Меню, а не в системных библиотеках. Решать аффтару. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 15:45
|
|||
|---|---|---|---|
|
|||
Про рефлексию вопрос |
|||
|
#18+
вадячем рефлексия тормознута? Нет, дело не в производительности. Тут в соседней теме хорошее видео. Там в начале про рефлексию есть. 16488677 вадяи чем её можно заменить? методов для выполнения ожидается много. Любым прямым диспатчем, через Map+Callable, через полиморфизм. Можно таки внятно объяснить, зачем все методы в одном классе? вадяif и switch при >100 методов будет тоже не быстро. А при параллельных иерархиях будет убийственно для поддержки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 17:10
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
Учитывая что this.getClass().getMethod(...) имеет ограниченную спецификацию методов или количество методов счётно то совершенно нет смысла городить общую (generic) постановку при которой нам "что угодоно" приходит в data и мы с ним делаем "что нибудь". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.08.2014, 19:11
|
|||
|---|---|---|---|
Про рефлексию вопрос |
|||
|
#18+
из просмотренного и прочитанного можно сделать вывод - рефлексия не очень медленный процесс, и в большинстве случаев, потерю быстродействия не поймать. рефлексия не безопасна, если использовать в лоб, можно нарваться, но если кто-то захочет что-то взломать - вопрос в цене на защиту от взлома и цене данных...(в моём случае достаточно все методы загнать в массив + вся проверка в пару строк) следующий вопрос - цена разработки и сопровождения в применении к своему случаю - у меня есть метод onMessage, я его написал, отладил, и забыл про него. дальше только добавляю методы для обработки собщений, обработка простая максимум 40 строк(подготовка и обращение к базе , try/catch + немного логики). при этом повторяющиеся куски кода можно вынести в отдельный метод. расположив его неподалёку от места где вызывается. получается наглядно и просто. но когда число методов вырастает - рыскать по такому количествунесколько мутноватно. автор Паттерн "команда" предлагает безкомпромиссную декомпозицию - на каждую команду создается отдельный класс. т.е. получеатся 100+ файлов? компиляция многих файлов - больше времени, чем одного большого (на время разработки существенно) да и искаить что-то в файлах затрвтнее, чем в одном файле. if/switch - тоже не есть хорошо - (т.е. хорошо когда получаешь за строки ) -нужно написать метод, да не зfбыть добавить его в листинг if/switch и сколько времени потребуется для прохождения и сравнения всех 100+ строковых данных.... авторМожно таки внятно объяснить, зачем все методы в одном классе? для начала из простоты, пока их 15 проблем нет, удобно , наглядно. вот и встал вопрос сгруппировать в разные файлы(я не говорю классы, хотя придется группировать в классы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2126693]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 482ms |

| 0 / 0 |
