Je suis nouveau sur Java.
Je veux savoir la différence entre:
List< String > list = new ArrayList<>();
et
ArrayList< String > list = new ArrayList<String>();
et
ArrayList< String > list = new ArrayList<>();
Grâce
OriginalL'auteur Hossein | 2012-01-15
Le premier n'est valable que depuis Java 7, et est l'équivalent de
C'est juste moins verbeux.
Même pour la troisième, ce qui est équivalent à
et est donc strictement équivalent à la seconde.
Vous devriez préférer la première, pour les raisons mentionnées dans les réponses à la question suivante: La liste par rapport ArrayList comme type de référence?
OriginalL'auteur JB Nizet
Les trois sont un peu l'équivalent:
Ci-dessus, vous êtes à la déclaration d'une variable qui implémente l'
List
interface qui contiendraString
éléments, et de l'instancier avec la classe de bétonArrayList
. Aussi, vous êtes à l'aide de Java 7 nouveau diamant de la syntaxe, de fils, vous n'avez pas à écrire de nouveauString
entre les<>
.Ci-dessus, vous êtes à la déclaration d'une variable de la classe de béton
ArrayList
qui contiendraString
éléments, et de l'instancier avec la classe de bétonArrayList
à l'aide de la "traditionnelle" de la syntaxe qui mandats que vous spécifiez leString
type entre les<>
.Ci-dessus, vous êtes à la déclaration d'une variable de la classe de béton
ArrayList
qui contiendraString
éléments, et de l'instancier avec la classe de bétonArrayList
. Aussi, vous êtes à l'aide de Java 7 nouveau diamant de la syntaxe, de fils, vous n'avez pas à écrire de nouveauString
entre les<>
.Être conscient que le diamant de la syntaxe (
<>
) ne fonctionne que dans Java 7 et ci-dessus, pour les versions précédentes de Java que vous êtes coincé avec l'aide de la syntaxe traditionnelle (<the-type>
) pour l'instanciation des génériques.Les deux dernières formes sont complètement équivalentes; la première forme est un peu différente puisque vous êtes en précisant que le
list
variable est de typeList
et non de typeArrayList
- et c'est la forme préférée, depuis bien orientée objet de pratiques que vous devriez programme d '"interface", pas une "mise en œuvre".OriginalL'auteur Óscar López
Il y a deux points à remarquer ici:
1.Le nouveau Java 7 diamants opérateur vous permet d'instancier une classe générique sans spécifier le paramètre type sur les deux côtés. Donc, ces deux sont équivalentes:
2.Le point le plus important est la différence entre les deux instanciations. Le second est clair:
Dans le premier:
vous êtes en utilisant le fait que
ArrayList
est un sous-type deList
et, par conséquent, la cession est valable. Cependant, sur le nouveaulist
objet vous avez seulement un sous-ensemble de méthodes qui sont inclus dansList
(parce que votre objet est déclaré commeList
après tout), mais avec les implémentations présents dansArrayList
. Cela s'appelle le polymorphisme programmation orientée objet et permet d'utiliser un sous-type d'une classe à la place de la mère, le père ou la mère est prévu, afin de fournir des différentes fonctionnalités.OriginalL'auteur Tudor