Oi Bruno! Tudo bem?
Para retornar um objeto que não pode ser mais modificado, você pode usar a palavra chave final
nos atributos desse objeto. Ao fazer isso, o próprio compilador não irá deixar você nem fazer um setter usando aquele atributo. Tente usar esse exemplo:
public class MeuObjeto {
private final int valor;
private final String nome;
public MeuObjeto(int valor, String nome) {
this.valor = valor;
this.nome = nome;
}
public int getValor() {
return valor;
}
public String getNome() {
return nome;
}
public void setValor(int valor){
this.valor = valor;
}
public void setNome(String nome){
this.nome = nome;
}
}
É mais ou menos assim que a implementação da unmodifiableList()
funciona por baixo dos panos: todos os métodos da List que poderiam modificá-la, ao serem sobrescritos, retornam uma exceção dizendo que a lista não pode ser modificada:
static class UnmodifiableList<E> extends UnmodifiableCollection<E>
implements List<E> {
private static final long serialVersionUID = -283967356065247728L;
final List<? extends E> list;
UnmodifiableList(List<? extends E> list) {
super(list);
this.list = list;
}
public boolean equals(Object o) {return o == this || list.equals(o);}
public int hashCode() {return list.hashCode();}
public E get(int index) {return list.get(index);}
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
public int indexOf(Object o) {return list.indexOf(o);}
public int lastIndexOf(Object o) {return list.lastIndexOf(o);}
public boolean addAll(int index, Collection<? extends E> c) {
throw new UnsupportedOperationException();
}
public ListIterator<E> listIterator() {return listIterator(0);}
Porém, no nosso caso, ao invés de retornar uma exceção, o programa nem compila ao tentarmos alterar o objeto.
A ideia principal é essa. Espero ter ajudado!
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!