Middle
213
O que é necessário fazer para criar uma classe imutável em Java?
Resposta da IA
sobes.tech IA
- Declare uma classe com o modificador
finalpara evitar herança. - Declare todos os campos da classe com o modificador
final. - Declare todos os campos da classe com o modificador
privatepara evitar acesso direto. - Não forneça setters para os campos.
- Se a classe contiver objetos mutáveis (por exemplo,
ArrayList), então:- No construtor, copie os objetos mutáveis de entrada em vez de atribuir referências.
- Nos getters, retorne cópias dos objetos mutáveis em vez dos próprios objetos.
Exemplo:
// A classe Person é imutável
public final class Person {
private final String name;
private final int age;
private final List<String> tags; // Campo mutável
// O construtor faz uma cópia profunda dos campos mutáveis
public Person(String name, int age, List<String> tags) {
this.name = name;
this.age = age;
// Copia a lista ao criar o objeto
this.tags = new ArrayList<>(tags);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// Retorna uma cópia da lista para evitar sua modificação externa
public List<String> getTags() {
return new ArrayList<>(tags);
}
// Sobrescreve os métodos equals e hashCode se necessário
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(tags, person.tags);
}
@Override
public int hashCode() {
return Objects.hash(name, age, tags);
}
}