Question

Je prends actuellement un cours en Java et j'ai couru dans un code source de confusion.

Exemple:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                //doStuff
            }
        };

Je ne comprends pas vraiment ce que ce code fait.

Comment la méthode d'exécution peut être associée à une instance d'une classe?

I googlé « Runnable » et a découvert qu'il est une interface. Suis-je implémentant l'interface en déclarant la méthode d'exécution entre accolades? Cela peut-il être fait pour toute interface en Java?

Je pourrait utiliser des liens / explications. Merci!

Était-ce utile?

La solution

Il est un classe interne anonyme qui ya mise en œuvre du Runnable d'interface. Oui, vous pouvez mettre en œuvre toute interface de cette façon, même si il y a des raisons pour lesquelles vous ou serait en aucun cas donné (manque de réutilisabilité étant un grand dans la colonne « ne serait pas »). En savoir plus sur les classes anonymes , mais il est essentiellement une forme pratique de ceci:

// Define it
class Foo implements Runnable
{
    public void run()
    {
        // Do stuff
    }
}

// And then use it
Runnable runnable = new Foo();

... à condition Foo est une classe interne (ou "imbriquées"). En savoir plus sur les classes imbriquées .

Autres conseils

oui, vous implémentez l'interface en déclarant la course. Oui, il peut être fait pour toute interface.

Cela se fait généralement lorsque vous passez une mise en œuvre à une méthode qui attend un argument d'un type d'interface, et vous n'avez pas une classe déclarée appropriée. Vous pouvez simplement implémenter l'interface sur place, et que les pistes de code. Très soigné.

  

I googlé "Runnable" et a trouvé   qu'il est une interface. Suis-je   la mise en œuvre par l'interface   déclarant le procédé d'exécution entre bouclés   supports ? Cela peut-il être fait pour tout   l'interface en Java?

Oui!

Ce code est instanciation d'un objet qui implémente Runnable. Parce que nous ne pouvons pas construire réellement une interface, tout code qui tente de le faire doivent fournir des implémentations pour les méthodes de l'interface entre accolades. Nous ne recevons pas vraiment de voir ce que la classe Java crée pour mettre en œuvre Runnable (ce sont des termes abstraits).

Si vous deviez faire ce qui suit:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                System.out.println("I'm running");
            }
        };
runnable.run();

vous verriez « Je suis en cours d'exécution » comme sortie.

Dans certains cas, cet exemple de code sera utile .... test runna = new test()

class test implements Runnable{
        test(){
            Thread t = new Thread(this);
            t.start();
        }
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true){
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.print("asd");
            }
        }

    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top