powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / methods
17 сообщений из 42, страница 2 из 2
methods
    #33972244
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_d ???[quot Blazkowicz]
...
кладу в Object[] (int, float)
...


Ого.
Это как так?
Может отрабатывает приведение типов?

Автобоксинг наверное.
...
Рейтинг: 0 / 0
methods
    #33972248
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Timm Blazkowicz
На кой хер если class[] можно получить из объектов которые находятся в Object[]?
Чтобы не заморачиваться с примитивными типами. Выше уже говорили.

Блин и точно ведь лажа.
...
Рейтинг: 0 / 0
methods
    #33972267
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs Blazkowicz
На кой хер если class[] можно получить из объектов которые находятся в Object[]?

Это можно сделать, только если в методе нет аргументов простых типов (int, etc).

О чём, собственно, уже написали...

Честно говоря не предствляю практической ценности интерфейса у которого есть оверлоады различающиеся только прмитивом или враппером. Так что, ИМХО, в подавляющем большинстве случаев можно применить это допущение.
...
Рейтинг: 0 / 0
methods
    #33972303
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пораскинул мозгами. Вот какая версия родилась.
Создаем собствеенную аннотацию. Над каждым методом прописываем её с нужной строкой.

Потом запускаем цикл, котороый перебирает все методы заданного интерфейса. У каждого метода получаем значение аннотации. И складываем в мапу Map<String, Method>.

Ну, а после инициализации вытаскиваем по строке метод и инвок его к чертовой бабушке. Вроде бы вопросов с примитивами возникнуть не должно.

Как вам вариант?
...
Рейтинг: 0 / 0
methods
    #33972322
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
 public   interface  Facade
{
    @Action("DoA")
     public   Float  doA( int  i);
    @Action("DoB")
     public   Float  doB( Double  d);
}



@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
 public  @ interface  Action
{
    String value();
}


 public   class  Invoker
{
     static   final  Map<String, Method> map =  new  HashMap<String, Method>();
     static 
    {
        Method[] declaredMethods = Facade. class .getDeclaredMethods();
         for  (Method method : declaredMethods)
        {
            Action action = method.getAnnotation(Action. class );
            map.put(action.value(), method);
        }
    }
    Object invoke(String action, Object target, Object... args)  throws  IllegalAccessException, InvocationTargetException
    {
         return  map.get(action).invoke(target, args);
    }
}


...
Рейтинг: 0 / 0
methods
    #33972330
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mozheyko_d
NotGonnaGetUs
А как искать ошибки если изменится сигнатура одного из 50 методов?

Проблема проектирования

Это зависит от того кто является инициатором запроса к методу. Как вариант для клиент сервера можно использовать один и тот же интерфейс на клиенте и сервере. Тогда будет гарантия что у них одни и те же параметры. А вот внутренности между этими двумя уже будут заниматся всякой нужной ерундой. В любом случае на этот вопрос можно ответить только зная для чего всё это городится.
...
Рейтинг: 0 / 0
methods
    #33972332
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXERЕсть интерфейс в котором за 50 методов
Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить
Есть ли более изящное(простое) решение чем использование рефлекшена?

Если не секрет можно расказать какая среда у этой задачи? Какую проблему эта реализация должна решать? Проблему в реальном мире а не абстракцию связывания строки и метода.
...
Рейтинг: 0 / 0
methods
    #33972349
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Blazkowicz
КРрасиво.
ИМХО это хуже чем решение "в лоб": аннотации надо поддерживать (и JVM-ой, и в коде)...
...
Рейтинг: 0 / 0
methods
    #33972904
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz LINUXERЕсть интерфейс в котором за 50 методов
Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить
Есть ли более изящное(простое) решение чем использование рефлекшена?

Если не секрет можно расказать какая среда у этой задачи? Какую проблему эта реализация должна решать? Проблему в реальном мире а не абстракцию связывания строки и метода.
Природа задачи весьма абстрактна. Мне казалось это будет совсем просто.
На практике встречался с подобными задачи например проверка форм (веб-интерфейса БД) перед формированием объектов (с последуйщей отправкой в базу):
туча сеттеров хотя проверка однотипна
...
Рейтинг: 0 / 0
methods
    #33972911
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs LINUXER NotGonnaGetUsлучше заменить один класс с 50 методами, на 50 классов
Думаю это в любом случае не оправдано :D

Чем 50 if else лучше?
Хуже. Портит инкапсуляцию и вообще бардак.
...
Рейтинг: 0 / 0
methods
    #33973359
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER NotGonnaGetUs LINUXER NotGonnaGetUsлучше заменить один класс с 50 методами, на 50 классов
Думаю это в любом случае не оправдано :D

Чем 50 if else лучше?
Хуже. Портит инкапсуляцию и вообще бардак.

А почему тогда "не оправдано"?

С аннотациями, кстати, отпадает необходимость в создании классов, но при этом сохраняется идея универсализации процедуры поиска метода по строке.
(нужно только изменить сигнатуру слегка: Object invoke(String action, Facade target, Object... args))
Сказочные перспективы открываются :)
...
Рейтинг: 0 / 0
methods
    #33973718
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
А почему тогда "не оправдано"?


Блин, в смысле, конечно, if else лучше такого изврата,
ещё лучше простой reflection как в первом варианте(в простых случаях)
...
Рейтинг: 0 / 0
methods
    #33973743
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER NotGonnaGetUs
А почему тогда "не оправдано"?


Блин, в смысле, конечно, if else лучше такого изврата,
ещё лучше простой reflection как в первом варианте(в простых случаях)
Чем "простой рефлекшн еще лучше if else"? и почему только в простых случаях? он покрывает все случаи.
...
Рейтинг: 0 / 0
methods
    #33974722
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER NotGonnaGetUs
А почему тогда "не оправдано"?


Блин, в смысле, конечно, if else лучше такого изврата,
ещё лучше простой reflection как в первом варианте(в простых случаях)

А можешь простенько объяснить в чём "изврат" ?
Если не трудно, то с примерами кода.

Мне очень интересно почему 50 if else и один класс для 50 операций не нарушают "инкапсуляцию" и не создают "бардак", а 50 классиков (по одному на операцию) делают и то и другое.
...
Рейтинг: 0 / 0
methods
    #33975639
LINUXER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Timm
if else дают много кода в месте вызова. Конечно можно его генерить, но если вынести общее, то вызывать методы можно одним вызовом рефлект-метода что ИМХО очень удобно и понятно

2NotGonnaGetUs
Много классов не создают много кода в месте вызова
Если их вынести в отдельный pakage то они даже не будут мешаться

Проблема в том что методы объеденяют в интерфейсы(классов) не просто так, а потому что используют общие данные или имеют общую цель.
(Например это сеттеры.) Можно дать им доступ к нужным данным и т. д.
Но использовать классы не по назначению явно не удобно(в т ч для расширения).
Также методы могут использоваться другими частями системы о которых я могу не знать.
Т е я вижу такой подход идеологически не правильным, что может вызывать множество проблем
...
Рейтинг: 0 / 0
methods
    #33975836
pattron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LINUXERЕсть интерфейс в котором за 50 методов
Есть метод в котором нужно в зависимости он заданной строки выбрать какой из методов того интерфейса нужно запустить
Есть ли более изящное(простое) решение чем использование рефлекшена?pattern decorator?
...
Рейтинг: 0 / 0
methods
    #33975924
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LINUXER
2NotGonnaGetUs


Похоже, мне ещё учиться и учиться....
...
Рейтинг: 0 / 0
17 сообщений из 42, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / methods
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]