如何在Java中将方法及其参数添加到队列中? 例如:
class Demo {
int add(int x, int y) {
return x*y;
}
// Add this method
}
如果我们必须使用参数对此方法进行排队,我们如何才能实现此目标?
即
queueObject.add(this.add(10,20));
queueObject.add(this.add(20,30));
queueObject.remove();
queueObject.remove();
答案 0 :(得分:4)
如果您使用的是Java 8,则可以像这样创建IntSupplier
的队列:
Queue<IntSupplier> queue = // some new queue
queue.add(() -> add(10, 20));
queue.add(() -> add(20, 30));
// The getAsInt-method calls the supplier and gets its value.
int result1 = queue.remove().getAsInt();
int result2 = queue.remove().getAsInt();
答案 1 :(得分:0)
使用Java8:
@Test
public void test(){
QueueMethod q1= ()->System.out.println("q1 hello");
QueueMethod q2= ()->System.out.println("q2 hello");
Queue<QueueMethod> queues=new LinkedList<QueueMethod>();
queues.add(q1);
queues.add(q2);
queues.forEach(q->q.invoke());
}
@FunctionalInterface
interface QueueMethod{
void invoke();
}
Output:
q1 hello
q2 hello
答案 2 :(得分:-1)
你可以这样使用反射:
public class Catalog {
public void print(Integer x, Integer y){
System.out.println(x*y);
}
}
public static void main(String[] args) {
Catalog cat = new Catalog();
Queue<Method> queueObject = new LinkedList<Method>();
try {
Method printMethod = cat.getClass().getDeclaredMethod("print", new Class[]{Integer.class,Integer.class});
//Now you can add and remove your methods from queues
queueObject.add(printMethod);
//invoke the just added method
System.out.println(queueObject.element().invoke(cat,10,20));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}`
我得到这个输出:200