79 votes

Lists.newArrayList vs nouvelle ArrayList

Quelle est la meilleure construction pour créer un List de chaînes ? Est-ce Lists.newArrayList() (de goyave) ou new ArrayList() ?

est-ce juste une préférence personnelle ? ou s'agit-il simplement d'une inférence de type générique de type ? ou y a-t-il une valeur théorique ou pratique à utiliser Lists.newArrayList() ?

99voto

Bozho Points 273663

Le générateur de goyave économise la saisie des arguments de type plusieurs fois. Comparer:

 List<Foo<Bar, Baz>> list = Lists.newArrayList();
List<Foo<Bar, Baz>> list = new ArrayList<Foo<Bar, Baz>>();

Dans Java 7, c'est un peu obsolète cependant, car vous avez l'opérateur diamond :

 List<Foo<Bar, Baz>> list = new ArrayList<>();

30voto

Paul Bellora Points 26524

De la source de Goyave :

 public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
}

Tout ce qui est fait, c'est permettre l'inférence de type - aucune différence au moment de l'exécution.

14voto

Ajoutez un point, la surcharge de la version de Lists.newArrayList() est plus utile :

  • Lists.newArrayList(E... elements)
  • Lists.newArrayList(Iterable<? extends E> elements)
  • Lists.newArrayList(Iterator<? extends E> elements)

fournissent des fonctions plus utiles que new ArrayList() .

Par exemple : new ArrayList() ne peut pas :

 Lists.newArrayList("a","b");
Lists.newArrayList(anIterable);

4voto

phlogratos Points 3424

Voici ce que fait Lists.newArrayList :

 @GwtCompatible(serializable = true)
public static <E> ArrayList<E> newArrayList() {
    return new ArrayList<E>();
}

Ces deux éléments sont donc fondamentalement les mêmes, l'utilisation de newArrayList ayant l'avantage de ne pas avoir à dupliquer le type générique. Ceci est très utile sur les génériques complexes :

 List<Map<X,List<Y>> list = new ArrayList<Map<X,List<Y>>();

List<Map<X,List<Y>> list = Lists.newArrayList();

3voto

darrengorman Points 1702

Comme expliquéici , les principales motivations pour utiliser Lists , Sets etc sont d'améliorer la lisibilité/duplication dans votre code, et pour l'inférence de type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X