2011-07-21 20 views
8

Me acabo de dar cuenta de que ImmutableList.of(E[]) está en desuso en favor de ImmutableList.copyOf(), por la razón obvia de que la lista no puede hacerse realmente inmutable si la matriz sin formato se utiliza en otro lugar.guava: mejores prácticas con ImmutableList.of (E [])

¿Qué sucede si tiene un método que devuelve una matriz, y sabe con certeza que el método no conserva una referencia a la matriz, y su código no contiene una referencia a la matriz que no sea pasándolo al ImmutableList.of()?

¿Debo ...

  • seguir utilizando ImmutableList.of(E[]) (parece una mala idea ya que el método va a desaparecer)
  • uso Collections.unmodifiableList(Arrays.asList())
  • uso ImmutableList.copyOf() - esto parece la mejor idea donde no surgen problemas de rendimiento/recursos; de lo contrario, la copia es innecesaria.

Respuesta

16

ImmutableList.of(E[]) no lo hace y nunca ha almacenado la matriz que se le da directamente (no sería inmutable si lo hizo, lo que iría en contra de la punta de la clase). Fue desaprobado por razones de denominación. Si se echa un vistazo a la aplicación, que es:

public static <E> ImmutableList<E> of(E[] elements) { 
    return copyOf(elements); 
} 

Así que mi consejo es que sólo tiene que utilizar ImmutableList.copyOf() en general. Si sabe que está envolviendo una matriz para uso interno o algo así, siéntase libre de guardarse la copia y simplemente usar Arrays.asList, pero preferiría ImmutableList para la API.