2008-10-03 3 views

Répondre

31

en procédant comme suit:

List<User> users = Collections.emptyList(); 

Le type de la liste retournée de Collections.emptyList(); sera inférée comme String en raison du côté gauche de l'affectation . Toutefois, si vous préférez ne pas avoir cette inférence, vous pouvez définir explicitement en procédant comme suit:

List<User> users = Collections.<User>emptyList(); 

Dans ce cas particulier, cela peut apparaître comme redondant à la plupart des gens (en fait, je l'ai vu très peu de code dans la nature qui utilise des arguments de type explicites), mais pour une méthode avec la signature: void doStuff(List<String> users) il serait parfaitement propre pour un à invoquer doStuff() avec un argument de type explicite comme suit:

doStuff(Collections.<String>emptyList()); 
+2

chaque fois que vous écrivez un argument de type explicite dans une méthode, dieu tue un chaton (je pense que c'était josh bloch qui a dit ça) –

1
List<User> users = Collections.emptyList(); 
1

Après la créatinine Dans la liste vide, je recommanderais de la stocker comme une constante plutôt que d'en créer une nouvelle à chaque fois.

De plus, l'utilisation de Collections.emptyList() par rapport à new ArrayList(0) présente des avantages en termes de performances, bien que la différence soit probablement faible. La liste retournée par emptyList() est optimisée pour être une liste vide immuable. Par exemple, la méthode size() renvoie simplement 0, plutôt qu'une recherche de champ ou tout ce que fait ArrayList.

Questions connexes