2017-01-08 12 views
1

メソッドとそのパラメータをJavaのキューに追加するにはどうすればよいですか?たとえば :Javaでメソッドをキューに入れる方法

class Demo { 
    int add(int x, int y) { 
     return x*y; 
    } 
    // Add this method 
} 

我々はパラメータで、このメソッドをキューする必要がある場合、どのように我々はこれを実現することができますか?あなたは、Java 8を使用している場合、あなたはこのようなIntSupplierのキューを作成することができます

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

すなわち

Java8を使用して
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'の代わりに' Supplier 'を使用する必要があります。あなたがこれを行う場合、あなたはいくつかのタイプ情報を失うでしょう。 – marstran

+0

soooたくさんありがとうございました... –

0

 @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

関連する問題