Middle
Ko nepieciešams darīt, lai izveidotu immutable klasi Java?
sobes.tech AI
Atbilde no AI
- Deklarēt klasi ar
finalmodifikatoru, lai novērstu mantošanu. - Deklarēt visas klases laukus ar
finalmodifikatoru. - Deklarēt visus klases laukus kā
private, lai novērstu tiešu piekļuvi. - Nepiedāvāt seterus laukiem.
- Ja klase satur mutablas objektus (piemēram,
ArrayList), tad:- Konstruktorā kopēt iebraukošos mutablos objektus vietā, lai aizstātu saites.
- Getteros atgriezt mutablos objektu kopijas, nevis pašus objektus.
Piemērs:
// Person klase ir immutable
public final class Person {
private final String name;
private final int age;
private final List<String> tags; // Mutabls lauks
// Konstruktorā dziļi kopē mutablos laukus
public Person(String name, int age, List<String> tags) {
this.name = name;
this.age = age;
// Kopējam sarakstu, izveidojot jaunu objektu
this.tags = new ArrayList<>(tags);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
// Atgriež kopiju saraksta, lai novērstu tā maiņu ārpus klases
public List<String> getTags() {
return new ArrayList<>(tags);
}
// Pārrakstīt `equals` un `hashCode` metodes, ja nepieciešams
@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);
}
}