2017-03-02 3 views
2

kann jemand mir bitte helfen Klasseninstanz mit Überschreibung innerhalb Methodenparameter

String [] files= file.list(new FilenameFilter() { 
    @Override   
    public boolean accept(File dir, String name) { 
     // TODO Auto-generated method stub 
     return true;    
    } 
}); 

Dies ist nur Beispiel diesen Code Block java

zu verstehen ich brauche das Konzept der neuen Instanz mit Überschreibung Methode innerhalb Methodenparameter zu verstehen.

Ich verstehe, was dieser Code tun, aber ich brauche das Konzept zu verstehen *

+0

Es erstellt eine [anonyme Klasse] (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymyclasses.html), die die 'FilenameFilter'-Schnittstelle implementiert – UnholySheep

+0

Ich denke, dass Sie [Anonymous Classes Java lesen sollten Dokumentation] (https://docs.oracle.com/javase/tutorial/java/javaOO/anonymyclasses.html) –

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymyclasses.html –

Antwort

-2

Diese anonyme innere Klasse genannt wird

Eine Klasse, die keinen Namen hat als anonyme innere Klasse in Java bekannt. Es sollte verwendet werden, wenn Sie die Methode der Klasse oder der Schnittstelle überschreiben müssen.

+0

Es ist einfach anonyme Klasse. Keine innere Klasse. Innere Klassen und anonyme Klassen sind unterschiedlich. Natürlich können Sie eine Klasse haben, die beides gleichzeitig ist, aber soweit wir wissen, ist dies hier nicht der Fall. –

0

Werfen Sie einen Blick auf die documentation von File.list(FilenameFilter filter).

Es dauert ein FilenameFilter als Argument, das wiederum Methode

boolean accept(File dir, String name)

Sie wollen ein neues FilenameFilter an die Methode übergeben hat, und Sie tun, dass es in als anonymous class und Überschreiben der accept Methode, indem in der anonymen Klasse.

0

Betrachten Sie eine Methode mit einer Schnittstelle oder einer abstrakten Klasse als Parameter. Wenn Sie diese Methode aufrufen, müssen Sie eine konkrete Instanz des angegebenen Typs übergeben. Eine Möglichkeit besteht dann darin, innerhalb des Parameters eine Instanz zu erstellen. Dies wird anonyme Klasse genannt.

Sie sollten dies nur tun, wenn Sie diese Klasse nur einmal benötigen.

0

Wenn Sie die tatsächliche Implementierung der Liste() in java.io.File überprüfen, sieht es so aus.

Diese Methode erwartet jede Instanz, die FilenameFilter implementiert. Und was es innerhalb der File.list() -Methode macht, sind Aufrufe an accept() des Filterparameters. Und das führt die ursprüngliche Implementierung des Aufrufers tatsächlich aus. Das bedeutet also den überschriebenen Methodeninhalt, den Sie in diesem Fall bereitgestellt haben.