powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Динамический вызов метода...
15 сообщений из 15, страница 1 из 1
Динамический вызов метода...
    #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
Динамический вызов метода...
    #37918322
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чето я тоже не могу сообразить как первый кусок кода соотносится со вторым:)
...
Рейтинг: 0 / 0
Динамический вызов метода...
    #37918331
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
никак, второй кусок это просто пример рефлексивного программирования.

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

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



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

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

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



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

Вообще, интересно, что за задачу вы решаете - т.к. у нее, скорее всего, есть более изящное решение.
...
Рейтинг: 0 / 0
Динамический вызов метода...
    #37918415
vas0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
((Block.class) m.getMethod("getBlock" + j)).getTags().size();
...
Рейтинг: 0 / 0
Динамический вызов метода...
    #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
Динамический вызов метода...
    #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
Динамический вызов метода...
    #37918497
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
класс с методом getBlock1 будет Block1,
класс с методом getBlock2 будет Block2, и тд

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

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


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