¿Por qué es mejor volver unmodifiableList de un método en el que se crea la lista?

linuxNoob:
 public List<Integer> getInts()
{
    List<Integer> xs = new ArrayList<Integer>();
    xs.add(1);
    // return Collections.unmodifiableList(xs);
    return xs;
}   

Entiendo que devolver una lista no modificable evitará que el consumo de añadir elementos adicionales a la referencia de la lista, pero aparte de eso, ¿qué estoy ganando aquí envolviéndolo en una lista no modificable? Estoy creando una nueva lista cada vez que se invoca el método.

Bohemia:

Cuando un objeto devuelve un campo privado mutable, se expone a la alteración no deseada / desconocido de su estado interno por agentes externos, lo cual viola la encapsulación.

El patrón al que usted se refiere, llamada la publicación segura , protege frente a este problema. Se puede llevar a cabo mediante la devolución de ya sea una copia profunda, o el campo (y cualquier sub-campos mutables) en una envoltura inmutable.

En el caso de su código como comentario:

return Collections.unmodifiableList(xs);

es la creación de un nuevo objeto, pero sólo una capa muy delgada en la parte superior de la lista y que apenas sería capaz de medir el costo de la CPU o la memoria el rendimiento de hacerlo.

Tú también puedes:

return new ArrayList<>(xs);

para hacer una copia en profundidad (en este caso, porque Integeres inmutable).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=221744&siteId=1
Recomendado
Clasificación