Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамический вызов метода... / 15 сообщений из 15, страница 1 из 1
15.08.2012, 18:49:18
    #37918315
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
Есть вызовы типа:

Код: java
1.
2.
3.
m.getBlock1().getTags().size();
m.getBlock2().getTags().size()
m.getBlock3().getTags().size()


Как реализовать динамический вызов через цикл используя рефлексию?

Код: java
1.
2.
Class cls = Class.forName("Foo");
cls.getMethod("hello", null).invoke(cls.newInstance(), null);



что то не могу сообразить..

Спаисбо
...
Рейтинг: 0 / 0
15.08.2012, 18:57:34
    #37918322
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
чето я тоже не могу сообразить как первый кусок кода соотносится со вторым:)
...
Рейтинг: 0 / 0
15.08.2012, 19:05:52
    #37918331
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
никак, второй кусок это просто пример рефлексивного программирования.

мне нужно что то типа:

Код: java
1.
2.
3.
4.
for( int j = 1 ; j < 4 ; j++ )
{
   m.getMethod("getBlock" + j).getTags().size();
};



Это очень грубо, но я демонстрирую смысл желаемого.
...
Рейтинг: 0 / 0
15.08.2012, 19:10:18
    #37918336
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
я так и думал) в чистой java никак - это похоже на функциональное программирование). Ну можно сделать говно косяк - перебирать все методы, и вызывать только те что начинаются с getBlock но это реально костылище:)
...
Рейтинг: 0 / 0
15.08.2012, 19:11:59
    #37918338
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
то есть используя пример рефлексии из первого поста, никак?
...
Рейтинг: 0 / 0
15.08.2012, 19:29:16
    #37918351
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
еще раз - вызвать ты можешь все что угодно, вопрос как найти метод, если сможешь - значит и вызовешь
...
Рейтинг: 0 / 0
15.08.2012, 19:42:59
    #37918363
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
kasikникак, второй кусок это просто пример рефлексивного программирования.

мне нужно что то типа:

Код: java
1.
2.
3.
4.
for( int j = 1 ; j < 4 ; j++ )
{
   m.getMethod("getBlock" + j).getTags().size();
};



Это очень грубо, но я демонстрирую смысл желаемого.
Вызвать метод (вызвать - это вызвать) и преобразовать объект к классу, который содержит метод getTags.

Вообще, интересно, что за задачу вы решаете - т.к. у нее, скорее всего, есть более изящное решение.
...
Рейтинг: 0 / 0
15.08.2012, 20:59:35
    #37918415
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
Код: java
1.
((Block.class) m.getMethod("getBlock" + j)).getTags().size();
...
Рейтинг: 0 / 0
15.08.2012, 21:06:16
    #37918417
vas0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
что то я нагнал :)
Сначала найти нужный метод, потом его вызвать и преобразовать возвращаемое значение к нужному типу.

Примерно так:

Код: java
1.
2.
3.
4.
Class cls = form.getClass();
Method m = cls.getMethod("getBlock" + j);
Block b = (Block.class) m.invoke(new Object[]{form});
int size = b.getTags().size();
...
Рейтинг: 0 / 0
15.08.2012, 22:46:23
    #37918486
Озверин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
Код: 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.
public class Something {
    private Block block1 = new Block(1);
    private Block block2 = new Block(2);
    private Block block3 = new Block(3);

    public Block getBlock1() {
        return block1;
    }

    public Block getBlock2() {
        return block2;
    }

    public Block getBlock3() {
        return block3;
    }

    public static void main(String ...args) {
        try {
            Class cls = Class.forName("Something");
            for (Method m: cls.getDeclaredMethods()) {
                if (m.getName().startsWith("getBlock")) {
                    Block block = (Block) m.invoke(cls.newInstance());
                    System.out.println(block.getTags().getSize());
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (InvocationTargetException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (InstantiationException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (IllegalAccessException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }


    }
}



Можно по разному ;)
...
Рейтинг: 0 / 0
15.08.2012, 22:59:39
    #37918497
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
класс с методом getBlock1 будет Block1,
класс с методом getBlock2 будет Block2, и тд

так что вышеописанное не подходит(
...
Рейтинг: 0 / 0
15.08.2012, 23:47:03
    #37918519
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
А в чем глубинный смысл здесь в рефлексии если можно тоже самое на интерфейсах реализовать?
...
Рейтинг: 0 / 0
16.08.2012, 00:09:35
    #37918534
kasik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
Скорее всего я немного накрутил, и никакой рефлексии не надо, показав только верхушку айсберга задачи, думаю обойдусь тривиальными средствами.

всем спасибо, кто принимал участие в обсуждении
...
Рейтинг: 0 / 0
16.08.2012, 00:11:07
    #37918536
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
...
Рейтинг: 0 / 0
16.08.2012, 09:28:37
    #37918742
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический вызов метода...
забыл никя так и думал) в чистой java никак - это похоже на функциональное программирование). Ну можно сделать говно косяк - перебирать все методы, и вызывать только те что начинаются с getBlock но это реально костылище:)
это не функциональное, а Г...программирование.
- цифры часто прибавляют к именам (Button2), а не к действиям-методам.
К последним применяют ООП (базовый метод (класс) - одно имя и полиморфизмом вызов нужного по контексту).
Ну и на интерфейсах "сбоку" можно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамический вызов метода... / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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