Ich bin neu in Java.
Ich möchte wissen, der Unterschied zwischen:
List< String > list = new ArrayList<>();
und
ArrayList< String > list = new ArrayList<String>();
und
ArrayList< String > list = new ArrayList<>();
Dank
InformationsquelleAutor der Frage Hossein | 2012-01-15
Die erste ist nur gültig, da Java 7, und ist das äquivalent von
Es ist nur weniger ausführlich.
Gleiche für das Dritte, das entspricht
und damit streng äquivalent zur zweiten.
Sollten Sie lieber die erste, aus den genannten Gründen in den Antworten auf die folgende Frage: Liste versus ArrayList als Referenz geben?
InformationsquelleAutor der Antwort JB Nizet
Die drei sind etwas gleichwertig:
In der oben, sind Sie eine variable deklarieren, die die
List
Schnittstelle enthalten wirdString
Elemente, und instanziieren es mit der konkreten KlasseArrayList
. Auch sind Sie mit Java 7-das neue Diamant-syntax, Sohn Sie nicht haben, um wieder zu schreibenString
zwischen den<>
.In der oben, sind Sie eine variable deklarieren, von der konkreten Klasse
ArrayList
enthalten wirdString
Elemente, und instanziieren es mit der konkreten KlasseArrayList
mit der "traditionellen" syntax, die Mandate, die Sie angeben, dieString
Art zwischen den<>
.In der oben, sind Sie eine variable deklarieren, von der konkreten Klasse
ArrayList
enthalten wirdString
Elemente, und instanziieren es mit der konkreten KlasseArrayList
. Auch sind Sie mit Java 7-das neue Diamant-syntax, Sohn Sie nicht haben, um wieder zu schreibenString
zwischen den<>
.Bewusst sein, dass die Diamant-syntax (
<>
) funktioniert nur in Java 7 und höher, die für Vorherige Versionen von Java sind Sie stecken mit der traditionellen syntax (<the-type>
) für die Instanziierung Generika.Den letzten beiden Formen sind völlig gleichwertig; die erste form ist ein bisschen anders, da Sie angeben, dass die
list
variable ist vom TypList
und nicht der TypArrayList
- und das ist die bevorzugte form, da gute Objekt-orientierte Praktiken vorschreiben, dass Sie sollten Programm einer 'Schnittstelle', nicht ein 'implementation'.InformationsquelleAutor der Antwort Óscar López
Gibt es zwei Punkte, um hier zu bemerken:
1.Die neue Java 7 Diamant-operator können Sie instanziieren einer generischen Klasse ohne Angabe der type-parameter auf beiden Seiten. Also diese beiden sind äquivalent:
2.Wichtiger Punkt ist der Unterschied zwischen den ersten beiden Instanzen. Die zweite eins ist klar:
In die erste ein:
sind Sie mit der Tatsache, dass
ArrayList
ist ein Subtyp desList
und damit die Zuordnung gültig ist. Jedoch, auf die neuelist
Objekt, haben Sie nur die Teilmenge von Methoden, die inList
(weil Ihr Objekt deklariert wird, wieList
nachdem alle), aber mit Implementierungen, vorhanden inArrayList
. Dies wird als Polymorphie in der objektorientierten Programmierung und können Sie mit einem Subtyp einer Klasse anstelle der Eltern, wo die Eltern erwartet wird, um zu bieten unterschiedliche Funktionalitäten.InformationsquelleAutor der Antwort Tudor