Как поставить в очередь и вызвать реальные методы (а не сразу Eval) в Java? - PullRequest
2 голосов
/ 11 июня 2010

Есть список задач, которые чувствительны ко времени (но «время» в этом случае произвольно по отношению к тому, что говорит мне другая программа - это больше похоже на «галочки», а не на время).Однако я НЕ хочу, чтобы указанные методы оценивались немедленно.Я хочу, чтобы один исполнился после того, как другой закончил.Я использую связанный список для своей очереди, но я не совсем уверен, как / если я могу получить доступ к фактическим методам в классе, не оценивая их немедленно.

Код будет выглядеть примерно так ...

LinkedList<Method> l = new LinkedList<Method>();
l.add( this.move(4) );
l.add( this.read() );
l.removeFirst().call();
//wait 80 ticks
l.removeFirst().call();

move(4) будет выполнено немедленно, затем через 80 тиков, я удалю его из списка и вызову this.read(), который затем будет выполнен.имеет отношение к классам отражения, и я немного поковырялся, но я не могу заставить что-то работать или делать то, что я хочу.Если бы я только мог использовать указатели ...

Для пояснения: эти команды будут вызываться другим классом, который ничего не знает о времени, поэтому этот класс должен его обрабатывать.Он будет просто вызывать методы, которые должны выполняться последовательно.Некоторые методы не возвращают ничего, кроме изменения состояния.

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

PriorityBlockingQueue - ваш друг. Обычно, чтобы получить что-то, приближающее функции первого класса в Java, вы должны использовать небольшой интерфейс, такой как runnable, и расширить его в (анонимный внутренний) класс.

1 голос
/ 11 июня 2010

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

Проверьте класс Class и класс Method .

// Get the Class of the type you're grabbing methods from
Object target = new SomeObject();
Class theClass = target.getClass();
// Or, use the class literal:
Class theClass = SomeObject.class;

// Get the methods you want
// You need to know the method name and its parameter types.
Method aMethod = theClass.getMethod("move", Integer.class);

List<Method> myMethods = new LinkedList<Method>();
myMethods.add(aMethod);

// Later, you need an object on which to invoke a method.
Method currentMethod = myMethods.get(0);
currentMethod.invoke(target, 4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...