2016-07-15 18 views
-4

Was ich weiß über anonyme Klasse ist, wenn Sie eine Klasse oder Schnittstelle haben, und nur einige Ihrer Code implementieren oder überschreiben einige Klasse oder Schnittstelle Anonym, erhöht es die Lesbarkeit des Programms. Aber ich bin ein wenig verwirrt angenommen, in Zukunft müssen Sie die gleiche Schnittstelle für verschiedene Klassen implementieren, also in diesem Fall müssen Sie vorher Klasse umgestalten, gibt es also noch einen anderen Vorteil der anonymen Klasse? (Ist es die Leistung verbessert?)Was ist der Anwendungsfall und der Vorteil der anonymen Klasse in Java?

+4

Siehe http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-usused-in-java – Unknown

+0

Wie verwendet und Vorteil beide unterschiedliche Sache sind, und ich als auch gefragt, wie es die Leistung verbessert. –

+1

@Faizan http://stackoverflow.com/questions/3028341/java-anonymous-class-efficiency-implications –

Antwort

2

Was bedeutet das?

Eine anonyme Klasse ist nur, was ihr Name bedeutet - sie hat keinen Namen. Es kombiniert die Klasse und die Erstellung eines instance der Klasse in einem Schritt. Da anonyme Klassen keinen Namen haben, können Objekte nicht von außerhalb der Klasse instanziiert werden, in der die anonyme Klasse definiert ist. Tatsächlich kann ein anonymes Objekt nur aus dem gleichen Bereich instanziiert werden, in dem es definiert wurde.

Warum eine anonyme Klasse verwenden?

Anonyme Klassen können Zeit sparen und reduzieren die Anzahl der. java Dateien zum Definieren einer Anwendung erforderlich. Möglicherweise verfügen Sie über eine Klasse, die nur in einer bestimmten Situation wie Comparator verwendet wird. Dies ermöglicht eine "on the fly" -Erstellung eines Objekts.

Möglicherweise möchten Sie anonyme Klassen verwenden; viele Leute verwenden sie ausgiebig, um listeners auf GUIs zu implementieren.

Die Syntax für Anonymous Klassendefinitionen

Dieses Beispiel zeigt eine anonyme Klassendefinition für einen Komparator, der auf die sort() Methode in der Klasse Collections geben wird. Angenommen, aList ist eine gültige Liste von Daten, die sortiert werden sollen.

Collections.sort (aList, 
    new Comparator() { // implements the IF 
     public int compare (ObjectType o1, ObjectType o2) throws ..{ 
      //.... implementation for compare() 
     } // end of compare() 
    } // end of Comparator implementation 
); // closed paren for sort() and end of statement semicolon 

Regeln:

Eine anonyme Klasse muss immer eine Superklasse erweitern oder eine Schnittstelle implementieren, aber es eine explizite erstreckt nicht haben kann oder Klausel implementiert.

Eine anonyme Klasse muss alle abstrakten Methoden in der Superklasse oder der Schnittstelle implementieren.

Eine anonyme Klasse verwendet immer den Standardkonstruktor der Superklasse, um eine Instanz zu erstellen.

+0

Mindestens ein Teil davon wird wörtlich aus anderen Quellen kopiert. Siehe z.B. http://androidhello.com/androidEbooks/Android-Java.php?Ebooks-Android=2649 - Bitte geben Sie Kredit, wo Kredit fällig ist. –

Verwandte Themen