Solución:
Una vez que tu beanList
se ha inicializado, puede hacer
beanList = Collections.unmodifiableList(beanList);
para hacerlo inmodificable. (Ver colección inmutable vs no modificable)
Si tiene métodos internos que deberían poder modificar la lista y métodos públicos que no deberían permitir la modificación, le sugiero que lo haga
// public facing method where clients should not be able to modify list
public List<Bean> getImmutableList(int size) {
return Collections.unmodifiableList(getMutableList(size));
}
// private internal method (to be used from main in your case)
private List<Bean> getMutableList(int size) {
List<Bean> beanList = new ArrayList<Bean>();
int i = 0;
while(i < size) {
Bean bean = new Bean("name" + i, "address" + i, i + 18);
beanList.add(bean);
i++;
}
return beanList;
}
(Tu Bean
los objetos ya parecen inmutables).
Como nota al margen: si está utilizando Java 8+, su getMutableList
se puede expresar de la siguiente manera:
return IntStream.range(0, size)
.mapToObj(i -> new Bean("name" + i, "address" + i, i + 18))
.collect(Collectors.toCollection(ArrayList::new));
Usar Collections.unmodifiableList()
. Pasas tu original ArrayList
y devuelve una lista que arroja una excepción si intenta agregar, eliminar o cambiar elementos. Por ejemplo, use return Collections.unmodifiableList(beanList);
en lugar de return beanList;
al final de getImmutableList()
. main()
lanzará una excepción. los Collections
La clase tiene métodos para todos los otros tipos de colecciones comunes además de List
así como.
En JDK 8:
List<String> stringList = Arrays.asList("a", "b", "c");
stringList = Collections.unmodifiableList(stringList);
En JDK 9:
List stringList = List.of("a", "b", "c");
referencia