2016-08-24 3 views
3

私の目標は、runメソッドがメソッド呼び出しを15秒に一度キューからポップするThreadを継承するクラスに含まれるメソッド呼び出しのキューを持つことです。これは、巨大なスイッチのケースで文字列、ints、またはcharsを使用して日陰の方法で行うことができますが、誰かがこの問題のはるかにエレガントな解決策を持っているのだろうかと思いました。Javaのメソッドのキュー

これは次のようなものでしょうか?

public class Potato extends Thread{ 
    Queue<Methods> methodsQueue = new LinkedList<Methods>(); 

    public Potato(){} 
    run(){ 
     methodsQueue.poll();//This would execute a method 
    } 

    //Methods of this class... 
} 
+1

[Reflection API](https://docs.oracle) .com/javase/tutorial/reflect /) –

+2

実行者APIを見てください – danielbathke

+2

あなたは何をしっかりつかんでいますか? – shmosel

答えて

3

あなたが呼び出したいメソッドラップするためのインタフェースを使用することができます(AndroidのAPIで提供されています)この1つのライナーは、あなたがしようとしている同じ機能を提供します

public interface MethodWrapper { 
    void execute(); 
} 

public class Potato extends Thread{ 
    Queue<MethodWrapper> methodsQueue = new LinkedList<>(); 
    public Potato(){} 
    run(){ 
    methodsQueue.poll().execute(); 
    } 

//Methods of this class... 
} 
+1

'Runnable'インタフェースで何が問題になっていますか? – shmosel

+1

'Runnable'はうまくいくでしょう、それは本当です。重要なのは、メソッドではなくクラスの型のキューを扱うことです。 –

+0

ヒント:* Command * patternと呼ぶことができます。このアプローチについては、面白いことがたくさんあります。そして神は、反射を使わずに注意してください。 – GhostCat

0

を実装:

ScheduledExecutorService s = Executors.newScheduledThreadpool(numThreads);

をあなたはリフレクションを使用して任意のメソッドを実行する必要がある場合は、このサービスにそれらを提出すると、Cu中の各1をラッピングするのと同じくらい簡単ですstom Runnableの引数と呼び出しs.schedule(Runnable,long,TimeUnit);

(少なくともJavaを使用しているときは)私はあなたの問題に対して、よりエレガントで、煩雑な解決策を考えることはできません。そして、それは2004年以来、コアJava APIの一部としてテストされ、使用されているという利点があります。 - @CodeBlind