2012-04-26 10 views

Antwort

5

Für Typen wie List oder ArrayList sollte es keine Kompilierung geben und Sie sollten die Liste mit der Promotion Code to an interface zurückgeben.

Sie werden feststellen, dass Ihre Selbstbeschränkung tun, so war dies aus Nebenläufigkeit Paket wie CopyOnWriteArrayList und Sie verwendeten Methoden wie addIfAbsent, die nicht in List-Schnittstelle definiert ist.

Also, wenn Sie zurückkommen Arraylist oder eine konkrete Implementierung für diese Angelegenheit Sie API verwenden können, die definiert sind nicht im Vertrag (List Schnittstelle), aber dann sind Sie beschränkt in changeing von spezifischen Implementierung zu etwas anderem (ArrayList-LinkedList), da jeder, der Ihre API verwendet, sich entsprechend Ihren Änderungen ändern muss, zu viel, um zu erwarten, denke ich.

4

Die Folge ist, dass Sie Methoden der ArrayList, die keine Methoden der List-Schnittstelle für die zurückgegebenen Objekte sind, nicht aufrufen können.

Wenn das Objekt jedoch eine ArrayList ist, können Sie eine Umwandlung durchführen.

2

Der einzige Grund für die Rückgabe einer konkreten Klasse könnte sein, dass der Aufrufer diese konkrete Implementierung oder möglicherweise zusätzliche Schnittstellen zur konkreten Implementierung beachten muss. In Android müssen Sie beispielsweise häufig ArrayList verwenden, da das Framework nicht weiß, wie die generische Listenschnittstelle ordnungsgemäß serialisiert werden soll.

15

Am besten geben Sie den allgemeinsten Typ zurück, der für Ihre Schnittstelle geeignet ist.

Wenn es Gründe gibt, warum ArrayList für die von Ihnen zurückgegebenen Daten inhärent geeignet ist, sollten Sie diese verwenden. Typischerweise feine Liste ist aber Sie könnten auch von Natur aus ungeordnet sind, wenn die zurückgegebenen Werte mit Sammlung betrachten:

Diagram of Java collections hierarchy

+2

+1 für das Bild :) –

+1

Vielen Dank für das Diagramm –

Verwandte Themen