guava: Best Practices mit ImmutableList.of (E [])

8

Ich habe gerade festgestellt, dass ImmutableList.of(E[]) wird zu Gunsten von ImmutableList.copyOf() abgelehnt, aus dem offensichtlichen Grund, dass die Liste nicht wirklich unveränderlich gemacht werden kann, wenn das rohe Array an anderer Stelle verwendet wird.

Was ist, wenn Sie eine Methode haben, die ein Array zurückgibt, und Sie wissen, dass die Methode einen Verweis auf das Array nicht festhält und Ihr Code nicht einen Verweis auf das Array festhält, sondern nur übergeben es zu ImmutableList.of() ?

Soll ich ...

  • verwende weiterhin ImmutableList.of(E[]) (scheint eine schlechte Idee zu sein, da die Methode wegfällt)
  • benutze Collections.unmodifiableList(Arrays.asList())
  • Verwenden Sie ImmutableList.copyOf() - dies scheint die beste Idee zu sein, bei der keine Performance- / Ressourcenprobleme auftreten, andernfalls ist die Kopie unnötig.
Jason S 21.07.2011, 14:21
quelle

1 Antwort

16

ImmutableList.of(E[]) hat das Array, das es direkt erhält, nicht gespeichert und hat es auch nie gespeichert (es wäre nicht unveränderlich, wenn es so wäre, was den Punkt der Klasse besiegen würde). Es wurde aus Gründen der Nennung veraltet. Wenn Sie sich die Implementierung ansehen, ist es:

%Vor%

Also mein Rat wäre, einfach ImmutableList.copyOf() im Allgemeinen zu verwenden. Wenn Sie wissen, dass Sie nur ein Array für den internen Gebrauch oder ähnliches einpacken, können Sie die Kopie speichern und einfach Arrays.asList verwenden, aber ich würde ImmutableList für die API bevorzugen.

    
ColinD 21.07.2011, 15:32
quelle

Tags und Links