5 Stimmen

Java Ausführbare Frage

Ich besuche derzeit einen Kurs in Java und bin auf einige verwirrende Codes gestoßen.

Beispiel:

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

Ich verstehe nicht wirklich, was dieser Code macht.

Wie kann die run-Methode mit einer Instanz einer Klasse verbunden sein?

Ich habe nach "Runnable" gegoogelt und herausgefunden, dass es sich um ein Interface handelt. Implementiere ich das Interface, indem ich die run-Methode zwischen geschweifte Klammern deklariere? Kann dies für jedes Interface in Java gemacht werden?

Ich könnte einige Links/Erklärungen gebrauchen. Danke!

8voto

T.J. Crowder Punkte 948310

Es ist eine anonyme innere Klasse, die das Interface Runnable implementiert. Ja, du kannst jedes Interface auf diese Weise implementieren, obwohl es Gründe gibt, warum du es in einem bestimmten Fall tun würdest oder nicht (Mangel an Wiederverwendbarkeit ist ein großes Argument dagegen). Mehr über anonyme Klassen hier, aber es ist im Grunde genommen eine bequeme Form davon:

// Definiere es
class Foo implements Runnable
{
    public void run()
    {
        // Mach was
    }
}

// Und dann nutze es
Runnable runnable = new Foo();

...vorausgesetzt, Foo ist eine innere (oder "verschachtelte") Klasse. Mehr über verschachtelte Klassen hier.

2voto

hvgotcodes Punkte 114342

Ja, Sie implementieren die Schnittstelle, indem Sie die Methode run deklarieren. Ja, das kann für jede Schnittstelle gemacht werden.

Dies wird in der Regel gemacht, wenn Sie eine Implementierung an eine Methode übergeben, die ein Argument vom Typ "Interface" erwartet, und Sie keine passende deklarierte Klasse haben. Sie können einfach die Schnittstelle direkt implementieren, und dieser Code wird ausgeführt. Ziemlich praktisch.

2voto

Jason Punkte 194

Ich habe nach "Runnable" gegoogelt und herausgefunden, dass es sich um ein Interface handelt. Implementiere ich das Interface, indem ich die run-Methode zwischen geschweiften Klammern deklariere? Kann dies für jedes Interface in Java gemacht werden?

Ja!

Dieser Code instanziiert ein Objekt, das Runnable implementiert. Da wir tatsächlich kein Interface konstruieren können, muss jeder Code, der dies versucht, Implementierungen für die Methoden des Interfaces in geschweiften Klammern bereitstellen. Wir bekommen wirklich nicht zu sehen, welche Klasse Java erstellt, um Runnable zu implementieren (das sind abstrakte Begriffe).

Wenn Sie Folgendes tun würden:

Runnable runnable = new Runnable()
        {
            public void run()
            {
                System.out.println("Ich renne");
            }
        };
runnable.run();

würden Sie "Ich renne" als Ausgabe erhalten.

0voto

wizztjh Punkte 6849

In einigen Situationen wird dieser Beispielcode nützlich sein .... 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");
            }
        }

    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X