Передать фактическую команду в качестве аргумента Java - PullRequest
2 голосов
/ 01 сентября 2010

В настоящее время я использую отдельный поток в Java, который потенциально мог бы использоваться для множества различных функций, и мне интересно, есть ли способ передать команду для фактического вызова функции в качестве параметра. Это будет выглядеть примерно так:

class myWorkerThread implements Runnable
{
    private (<String/whatever other type>) runCommand;
    public myWorkerThread(<String/whatever other type> <my command>)
    {
    }
    public void run()
    {
       //Actually run that command.
    }

}

Я надеюсь получить инструмент, который не заставит меня использовать некрасивый оператор переключения регистра или что-то в этом роде. Различные функции, которые я бы попросил запустить поток, имеют разные параметры, но я бы хотел иметь возможность запускать их только с одним потоком.

Следите за вопросами / ссылки на другие ресурсы - это здорово.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 01 сентября 2010

Обычно вы делаете что-то подобное, создавая реализации Runnable и , запускающие их с Executor.Executor управляет вашими потоками.

Используя Callable и Future, , вы также можете получить результаты от задач, которые вы отправляете для асинхронного выполнения.

4 голосов
/ 01 сентября 2010

Вы не можете передавать указатели на функции в качестве параметров в Java.При желании вы можете определить интерфейс, поддерживающий операцию, и передать ссылку на объект, реализующий интерфейс.Вызовите необходимый метод из этой ссылки.

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

1 голос
/ 01 сентября 2010

Интерфейс Command можно создать методом execute().
Тогда каждая команда будет отдельным классом, реализующим интерфейс.

0 голосов
/ 01 сентября 2010

Возможно, вы захотите взглянуть на Java Reflection .

Это может быть потому, что вы можете вызывать методы по имени с использованием строкового объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...