Junior
რა არის უცვლელი ობიექტები (immutable)?
sobes.tech AI
პასუხი AI-სგან
არამოყვანილი ობიექტები, რომელთა მდგომარეობა ვერ იცვლება შექმნის შემდეგ. მცდელობისას ყოველთვის ახალი ობიექტი იქმნება.
Java-ში არამოყვანილი კლასების მაგალითები:
String- პრიმიტიული ორბოლების (
Integer,Long,Booleanდა სხვა) - ზოგი კოლექცია (
Collections.unmodifiableList(), Guava-ისImmutableList)
უპირატესობები:
- თრედ-უსაფრთხოება (არ საჭიროებს სინქრონიზაციას ერთდროულ წვდომაზე).
- გამოყენების სიმარტივე (ობიექტის მდგომარეობა ადვილად გასაგებია).
- შეიძლება გამოყენებულ იქნას როგორც გასაღებები HashMap-ში ან ელემენტები Set-ში (მისი hashCode და equals() არ იცვლება).
- აუმჯობესებს შესრულებას კეშირების და განმეორებითი გამოყენების საშუალებით.
მცირებობები:
- ახალი ობიექტის შექმნა ყოველ ცვლილებაზე შეიძლება იყოს არასასურველი ხშირი ცვლილებების დროს.
შექმნა საკუთარი:
- კლასის გამოცხადება
final-ად. - ყველა ველის პირადი და
final-ად გამოცხადება. - არ უნდა მიაწოდოთ სეტტერ მეთოდები.
- მუტაბელური ველებისთვის გეტერებში დაბრუნეთ ასლები, არა რეალური ობიექტების მითითებები.
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;
// ასლების შექმნა გარედან ცვლილებების თავიდან ასაცილებლად
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// არამოყვანილი სია დაბრუნება
return Collections.unmodifiableList(hobbies);
}
}