Junior
O que são objetos imutáveis?
sobes.tech IA
Resposta da IA
Objetos cujo estado não pode ser alterado após a criação. Ao tentar modificar, um novo objeto é sempre criado.
Exemplos de classes imutáveis em Java:
String- Wrappers primitivos (
Integer,Long,Boolean, etc.) - Algumas coleções (
Collections.unmodifiableList(),ImmutableListdo Guava)
Vantagens:
- Segurança em threads (não requerem sincronização em acessos concorrentes).
- Facilidade de uso (fácil entender o estado do objeto).
- Podem ser usados como chaves em HashMap ou elementos em Set (seu hashCode e equals() não mudam).
- Melhoram o desempenho através de cache e reutilização.
Desvantagens:
- Criar um novo objeto a cada modificação pode ser ineficiente para mudanças frequentes.
Criação própria:
- Declarar a classe como
final. - Declarar todos os campos como privados e
final. - Não fornecer métodos setters.
- Nos getters de campos mutáveis, retornar cópias em vez de referências aos objetos originais.
public final class ImmutablePerson {
private final String name;
private final int age;
private final List<String> hobbies;
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// Criar uma cópia para evitar alterações externas
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Retornar uma lista não modificável
return Collections.unmodifiableList(hobbies);
}
}