如何在java中排队并调用实际方法(而不是立即eval)?

时间:2010-06-10 23:08:34

标签: java reflection pointers methods queue

有一个时间敏感的任务列表(但在这种情况下,“时间”对于另一个程序告诉我的是任意的 - 它更像是“滴答”而不是时间)。但是,我不希望所述方法立即进行评估。我希望一个在另一个完成后执行。我正在为队列使用链接列表,但我不确定如何在不对其进行立即评估的情况下访问类中的实际方法。

代码看起来像......

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 个答案:

答案 0 :(得分:2)

PriorityBlockingQueue是你的朋友。通常为了获得一些近似于java中的第一类函数的东西,你可以使用一个小的接口,比如runnable,并在(匿名的内部)类中扩展它。

答案 1 :(得分:1)

你当然可以像你的例子一样做点什么。您也可以使用接口和类做一些事情并放弃反射。我不知道哪种方法最适合你的情况。这是你如何用反射来做到的。

查看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);