2017-01-08 53 views
1

如何將方法及其參數添加到Java中的隊列中? 例如:如何在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(); 
+1

'隊列 queue','queue.add(() - >加(10,20))'。 –

+0

一個更好的問題應該包括你已經嘗試過嗎?任何挑戰,如錯誤,行爲等等,示例代碼 – iamiddy

+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(); 
+0

非常感謝,如果我們有不同的參數,如(byte [],int) –

+0

@akashdoijode只要函數的返回類型相同,這是沒有問題的。如果每種功能的返回類型不同,則需要使用'供應商'而不是'IntSupplier'。如果你這樣做,你會失去一些類型的信息。 – marstran

+0

謝謝sooo ... –

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 
-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

+0

爲什麼使用反射的東西你不必使用反射? – marstran