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 ...
ImmutableList.of(E[])
(scheint eine schlechte Idee zu sein, da die Methode wegfällt) Collections.unmodifiableList(Arrays.asList())
ImmutableList.copyOf()
- dies scheint die beste Idee zu sein, bei der keine Performance- / Ressourcenprobleme auftreten, andernfalls ist die Kopie unnötig. 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:
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.
Tags und Links java collections guava