/ / OOP-Prinzip "Codierung an eine Schnittstelle"? - Java, Arrayliste

OOP-Prinzip von "Codierung zu einer Schnittstelle"? - Java, Arraylist

Ich habe irgendwo gelesen, dass wir eine ArrayList polymorph wie folgt instanziieren sollten:

List myList = new ArrayList();

aber wenn ich benutze

ArrayList myList = new ArrayList();

Bei diesem Ansatz sehe ich mehr Methoden, wenn ich tippe myList.(ctrl+space)

Bitte leiten Sie mich über die Unterschiede (Vor- und Nachteile) zwischen ihnen

Antworten:

4 für die Antwort № 1

Normalerweise ist der Grund dafür, dass Sie für eine Schnittstelle kodieren, damit Sie die konkrete Klasse, die Sie später verwenden, austauschen können, wenn dies sinnvoll ist ArrayList zum LinkedList weil Sie Probleme mit der Fragmentierung / Neuzuordnung des Speichers entdeckt haben. Sie müssen nur die Zeile, in der das Objekt erstellt wird, und nicht Ihren anderen Code ändern, da Sie den Code eingegeben haben List Schnittstelle, und beide konkreten Klassen implementieren List.

Wenn du brauchen einen der benutzen ArrayList Methoden, die nicht auf der List Schnittstelle, dann ist es in Ordnung, die Deklaration zu ändern und diese Methode zu verwenden. Man muss nur wissen, dass man seinen Code fest an koppelt ArrayListeine bestimmte konkrete Klasse, anstatt zu List, eine Schnittstelle, die von einer Vielzahl von Klassen implementiert wird.

Ihre voreingestellte Position sollte sein, um den Code einzugebenSchnittstelle, da diese maximale Flexibilität / minimale Kopplung bietet. Das heißt aber nicht, dass Sie die Klasse nicht direkt nutzen, wenn Sie es brauchen, nur dass Sie so flexibel wie möglich sind.


0 für die Antwort № 2

Wenn Sie den von Ihnen vorgeschlagenen Ansatz verwenden, müssen Sie sich auf eine bestimmte Implementierung des Behälters beschränken, was in vielen Situationen nicht gut ist. Wenn Sie Methoden verwenden müssen, die nur in vorhanden sind ArrayList Sie haben zwei Möglichkeiten - entweder deklarieren myList wie ArrayListoder niedergeschlagen myList wann immer Sie eine Methode brauchen, die nur in gefunden wurde ArrayList.