powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Красивое решение вместо рефлексии
13 сообщений из 13, страница 1 из 1
Красивое решение вместо рефлексии
    #38406684
ErikI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой код:
Код: 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.
    @Autowired
    private Call call;

    public Map<String, Object> mapInfo() {
        Map<String, Object> map = new HashMap<String, Object>();
        Class noparams[] = {};

        Class refClass = call.getClass();
        Method[] cMetods = refClass.getInterfaces()[0].getMethods();

        try {
            for(Method cMetod : cMetods) {
                Method method = refClass.getDeclaredMethod(cMetod.getName(), noparams);
                map.put(cMetod.getName(), method.invoke(call, null ));
            };
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        return map;
    }


Надо убрать рефлексию. Понятное дело, что Call это интерфейс. Мне надо вызвать все методы которые имплементирует подставленный класс. Вот интерфейс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public interface Call {
    public String service();
    public String serviceXL();
    public String phoneNumber();
    public String language();
    public String languageXL();
    public String serviceDate() throws ParseException;
    public String serviceTime() throws ParseException;
    public String serviceTimeXLstart() throws ParseException;
    public String serviceTimeXLend() throws ParseException;
    public List<String> callList();
}


Вопрос просто тупо вызвать все методы или есть еще варианты?
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407145
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErikI,

Да, тупо вызывать все методы, а в чём дело-то ?

Чем не нравится?
Чем не нравится решение с Reflection ?

Они правда разные будут, по Reflection ты все методы будешь всегда вызывать (все без параметров),
а руками -- только указанные.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407149
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErikI,

У тебя кстати некоторые методы имеют другие сигнатуры.

А так можно было бы объявить один интерфейс с одним методом и сделать много реализаций, положить их в массив или коллекцию, и в цикле вызывать.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407172
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА так можно было бы объявить один интерфейс с одним методом и сделать много реализаций, положить их в массив или коллекцию, и в цикле вызывать.
В Java 8 есть какие-никакие ссылки на методы. Возможно их будет проще складироват в Map.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407227
Фотография Паша01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебя пугает то, что ты в твоем классе, который реализует этот интерфейс, будет много пустых ненужных методов, но которые как бы надо "реализовать" у себя, то попробуй паттерн Адаптер. В двух словах, он делает так, чтобы лишние методы перед глазами не маячили. И в твоем классе будет будут те методы, которые действительно надо реализовать.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407235
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как все методы выглядят как акцессоры, то есть смысл их привести к именованию JavaBeans и получать значения через Introspector или Apache Commons Bean Utils. Та же рефлексия, но, возможно, более лаконичный код.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407570
ErikI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за советы. Буду думать над предложенными вариантами.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407583
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErikIСпасибо за советы. Буду думать над предложенными вариантами.
Я бы делал через BeanUtils.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38407630
Мужик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маловато условий для решения. Кроме предложенных есть еще варианты статической и динамической кодогенерации.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38408985
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErikIСпасибо за советы. Буду думать над предложенными вариантами.

Вот за чё мне нравятся Java программисты, так это что они над каждой хернёй думают.
Тут не думать, тут делать надо.

Java -- это грёбаный кроссплатформенный объектноориентированный Бейсик.
Написал -- и забыл.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38408991
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВот за чё мне нравятся Java программисты, так это что они над каждой хернёй думают.
Тут не думать, тут делать надо.
Java -- это грёбаный кроссплатформенный объектноориентированный Бейсик.
Написал -- и забыл.
Клац-клац и в продакшн. Да?
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38409031
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТут не думать, тут делать надо.

Это никак цитата из какого-то анекдота?
MasterZivJava -- это грёбаный кроссплатформенный объектноориентированный Бейсик.
Написал -- и забыл.
Если писать не думая, то забыть не дадут благодарные пользователи.
...
Рейтинг: 0 / 0
Красивое решение вместо рефлексии
    #38409224
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfq,
ну, он преувеличил)).
Но в java действительно, очень много усложняют на пустом месте.
Рефлексия (RTTI Delphi) нужна в очень ограниченном числе случаев
Код: plaintext
1.
2.
3.
4.
5.
6.
 Определить класс объекта. 
    Получить информацию о модификаторах класса, полях, методах, конструкторах и суперклассах.
    Выяснить, какие константы и методы принадлежат интерфейсу. 
    Создать экземпляр класса, имя которого неизвестно до момента выполнения программы.
    Получить и установить значение свойства объекта.
    Вызвать метод объекта.
    Создать новый массив, размер и тип компонентов которого неизвестны до момента выполнения программ.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Красивое решение вместо рефлексии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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