2017-04-08 3 views
4

Le titre dit tout. C'est une question simple vraiment. Je voulais juste comprendre comment ces deux choses fonctionnent vraiment. Quelle serait la meilleure option pour retourner une liste vide immuable? Serait-il préférable de faire Collections.emptyList() ou ImmutableList.of() ou y a-t-il une troisième et meilleure option?Collections.emptyList() vs ImmutableList.of de gava()

+2

Si votre méthode prend un 'ImmutableList' alors évidemment vous avez besoin de la méthode goyave. Dans le cas contraire, l'équipe Gava elle-même dit utiliser la fonctionnalité JDK de préférence à Goyave si elle est disponible. –

+0

J'utilise toujours 'ImmutableList.of'. C'est 5 caractères plus courts. – ZhekaKozlov

+1

@Zheka Si vous utilisez une importation statique, 'empyList()' est admirablement succinct et 'of()' n'a aucun sens. –

Répondre

4

J'utiliser Collections.emptyList() parce

1) pourquoi utiliser une bibliothèque 3ème partie lorsque vous avez déjà la même chose dans JDK

2) Collections.emptyList() retourne une vraie classe simple privée Collections.EMPTY_LIST (voir Collections.java JDK).

Considérant que ImmutableList.of() renvoie une liste immuable de Guava avec toutes les fonctionnalités comme si elles contenaient vraiment des objets, en l'initialisant avec new Object[0].

Si vous n'avez besoin que de la liste vide, vous n'avez pas besoin de la fonctionnalité ImmutableList.

+1

Votre troisième point est faux. Dans Guava 21, 'ImmutableList.of()' renvoie une liste vide singleton, qui est 'new RegularImmutableList (ObjectArrays.EMPTY_ARRAY)', donc il n'y a pas d'allocation. L'utilisation de l'implémentation standard présente un avantage pour l'envoi de méthode virtuelle (il existe de nombreuses sous-classes 'ImmutableList', mais dans la plupart des cas vous en rencontrez seulement un ou deux et un site d'appel mono- ou bimorphe peut être optimisé). IlRC avait auparavant une classe 'EmptyImmutableList', mais elle a été abandonnée pour des raisons d'efficacité. – maaartinus