2010-05-02 3 views
0

Aujourd'hui, je lisais du code Hibernate et je rencontre quelque chose d'intéressant. Il y a une classe appelée CollectionHelper qui définit la varibale constante suivante:La meilleure façon d'assigner une instance immutable à une collection en Java

public final class CollectionHelper { 

    public static final List EMPTY_LIST = Collections.unmodifiableList(new ArrayList(0) ; 
public static final Collection EMPTY_COLLECTION = Collections.unmodifiableCollection(new ArrayList(0)); 
public static final Map EMPTY_MAP = Collections.unmodifiableMap(new HashMap(0)); 

Ils ont utilisé ces constantes pour initialiser les collections avec des instances immuables. Pourquoi n'ont-ils pas simplement utilisé Collections.EMPTY_LIST pour initialiser des listes? Y a-t-il un avantage à utiliser la méthode suivante?

+5

@Ali: Je ne sais pas, mais tout le monde ne connaît pas tous les détails des API Java. L'autre jour, j'ai répondu à quelqu'un et j'ai utilisé la méthode numberOfLeadingZeros (..) * de * Integer * et un programmeur averti a commenté qu'il ne connaissait pas cette méthode. Je ne viens pas à SO ou à la publication quotidienne de WTF à chaque fois que je rencontre un morceau de code qui réinvente une partie d'une API Java obscure et appelle ça "intéressant". * Ce n'est pas intéressant, pas grand chose à voir ici d'ailleurs couper les cheveux, se déplacer. – SyntaxT3rr0r

Répondre

1

Non, il n'y a aucun avantage. La seule différence apparente à moi est que cette méthode est garanti pour retourner un EMPTY_LIST différent de tout List créé avec Collections.emptyList(), alors que les implémentations de Collections.emptyList() peuvent ou ne peuvent pas retourner les mêmes instances List. Je suis plus enclin à être d'accord avec le commentaire de @ WizardOfOdds qu'ils ne connaissaient tout simplement pas ces fonctions de l'API.

0

Il peut s'agir de fois où il améliore les performances en réduisant le nombre d'implémentations utilisées sur un site d'appel particulier, ce qui permet de meilleures optimisations monomorphiques et bimorphes. Un peu long, cependant.

Questions connexes