2016-04-14 14 views
0

Ich habe den folgenden Code:Eine unveränderbare Liste an ImmutableList.copyOf() übergeben?

private static final ImmutableMultimap<String, String> namesToAddress; 

public static List<String> getAddresses(String name){ 
    return ImmutableList.copyOf(namesToAddress.get(name)); 
} 

Meine Frage ist wheter die Defensive copyOf (hier), die notwendig ist, da die get() gibt eine unveränderliche Liste überhaupt?

Hinweis Ich verwende ImmutableMultiimap von Google Guava.

Danke.

+2

'ImmutableMultimap # get' eine' ImmutableCollection' zurückgibt. Es gibt keine Notwendigkeit, es zu kopieren. Wenn Sie jedoch eine "Liste" benötigen ... – Savior

+0

In der Google Guava-Dokumentation (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ImmutableListMultimap.html) wird darauf hingewiesen mmutableMultimap # get gibt eine UnmutableList zurück ... – user1974753

+3

Außerdem wird 'ImmutableList.copyOf' sowieso keine 'ImmutableList' kopieren. –

Antwort

5

Paar Dinge (vor allem in den Kommentaren bedeckt, aber als Antwort):

  • Wenn Sie ImmutableListMultimap als Typ für namesToAddresses verwenden, get() wird eine ImmutableList zurückkehren; kein Anruf erforderlich copyOf oder Cast oder irgendetwas
  • Auch wenn Sie das nicht tun, wird ImmutableMultimap.get() eine ImmutableCollection zurückgeben; ImmutableCollection s haben eine asList() Methode anzusehen (oder ggf. kopieren), um die Sammlung als ImmutableList
  • ImmutableList.copyOf(ImmutableCollection) Aufruf wird am Ende asList() auf die Sammlung Aufruf ohnehin