вызвать метод со связанной строкой - PullRequest
1 голос
/ 09 февраля 2012

В Java я хочу вызвать метод в цикле for

for(int i = 0; i < 5; i++ ){
 myMethod.get + Integer.toString(i)(theValue);
}

где вызываемый метод называется myMethod.get1, myMethod.get2, myMethod.get3 ...

Можно ли это сделать?

Ответы [ 6 ]

6 голосов
/ 09 февраля 2012

В принципе это возможно посредством отражения.Однако такой вопрос часто является признаком того, что ваша программа плохо спроектирована.Скорее всего, вам было бы намного лучше хранить данные в структуре данных, такой как List или массив, который позволяет вам получать значения из них по индексу, или, возможно, Map.

1 голос
/ 09 февраля 2012

инкапсулирует вашу логику обработки следующим образом

interface Worker {

    void doWork(Object param);
}

class Test {

    private HashMap<Integer, Worker> map = new HashMap<Integer, Worker>();

    public Test() {
        map.put(1, new Worker() {

            @Override
            public void doWork(Object param) {
                // do something for 1
            }
        });
        map.put(2, new Worker() {

            @Override
            public void doWork(Object param) {
                // do something for 2 
            }
        });

    }


    public void invoke(int id, Object param){
        map.get(id).doWork(param);
    }
}
0 голосов
/ 09 февраля 2012

Я думаю, что вы должны вместо того, чтобы использовать разные методы, которые, как я полагаю, вы делаете для определенного набора операций, вы должны создать класс для каждой функциональности. Все эти классы должны расширять общий класс или лучше будет реализовать интерфейс. Этот интерфейс может иметь метод get (), который будет реализован в каждом из предложений.

Теперь вам нужно создать массив / список ссылок на эти объекты. И вызовите метод get () каждого из этих классов в цикле for.

Конечно, вы можете использовать отражение иначе.

0 голосов
/ 09 февраля 2012

Да, вы можете использовать API отражения для этого. Смотрите класс java.lang.reflect.Method и используйте его метод invoke

0 голосов
/ 09 февраля 2012
0 голосов
/ 09 февраля 2012

Я не думаю, что это вообще хорошая идея, но вы можете использовать API отражения: Класс имеет метод getMethod, который принимает строковый аргумент, имя метода (также некоторые необязательные аргументы для типов параметров), затем вы можете вызвать его, вызвав invoke для него.

...