281 votes

Collections.emptyList() vs nouvelle instance

Dans la pratique, est-il préférable de retourner une liste vide comme ce:

Ou comme ce:

Ou est-ce complètement dépendant de ce que vous allez faire avec la liste retournée ?

346voto

aioobe Points 158466

La principale différence est que, Collections.emptyList() renvoie un immuable liste, c'est à dire, une liste à laquelle vous ne pouvez pas ajouter des éléments.

Dans les rares cas où vous ne voulez modifier la liste retournée, ce ne serait donc pas une option.

Je dirais que le fait de revenir une liste immuable est parfaitement bien (et même la façon préférée) tant que le contrat (documentation) ne fait pas explicitement état différemment.


La mise en œuvre de l' emptyList se présente comme suit:

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

donc, si votre méthode (qui retourne une liste vide) est appelée très souvent, cette approche peut même vous donner des performances légèrement meilleures.

58voto

Paul Jackson Points 765

Commençant par Java 5.0, vous pouvez spécifier le type d’élément dans le conteneur :

Je suis d’accord avec les autres réponses que dans les cas où vous souhaitez retourner une liste vide qui reste vide, vous devez utiliser cette approche.

33voto

Jeff Foster Points 22175

Collections.emptyList est immuable, il existe donc une différence entre les deux versions. Vous devez donc prendre en compte les utilisateurs de la valeur renvoyée.

Le renvoi de new ArrayList<Foo> crée toujours une nouvelle instance de l'objet, ce qui entraîne un très léger surcoût qui peut vous donner une raison d'utiliser Collections.emptyList . J'aime utiliser emptyList simplement parce que c'est plus lisible.

9voto

S73417H Points 1558

J'irais avec Collections.emptyList() si la liste retournée n'est modifiée d'aucune façon (car la liste est immuable), sinon j'irais avec l'option 2.

L'avantage de Collections.emptyList() est que la même instance statique est renvoyée à chaque fois et qu'il n'y a donc pas de création d'instance pour chaque appel.

3voto

Atul Points 11

Utilisez Collections.emptyList () si vous voulez vous assurer que la liste renvoyée n'est jamais modifiée. Voici ce qui est retourné lors de l'appel de emptyList ():

 /**
 * The empty list (immutable). 
 */
public static final List EMPTY_LIST = new EmptyList();
 

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