Sobes.tech
Junior

Ним өзгөрүлмө объекттер (immutable) эмне?

sobes.tech AI

AIден жооп

Өзгөртүлбөгөн объекттер, алардын абалы түзүлгөндөн кийин өзгөртүлбөйт. Өзгөртүү аракетинде дайыма жаңы объект түзүлөт.

Javaда өзгөртүлбөгөн класстардын мисалдары:

  • String
  • Примитивдүү каптоочулар (Integer, Long, Boolean жана башка)
  • Айрым коллекциялар (Collections.unmodifiableList(), Guavaдан ImmutableList)

Артыкчылыктары:

  • Тиркелүү коопсуздугу (биргелешип кирүүдө синхрондоштуруу талап кылынбайт).
  • Колдонуу оңой (объекттин абалы оңой түшүнүктүү).
  • HashMapда ачкыч катары же Setте элемент катары колдонулушу мүмкүн (алардын hashCode жана equals() өзгөрбөйт).
  • Кэшке жана кайра колдонууга мүмкүнчүлүк берүү менен иштөө ылдамдыгын жакшыртат.

Кемчиликтери:

  • Ар бир өзгөртүүндө жаңы объект түзүү эффективдүү болбой калышы мүмкүн көп өзгөрүүлөрдө.

Өзүңүз түзүү:

  • Классты final деп жарыялоо.
  • Бардык талааларды жеке жана final деп жарыялоо.
  • Setteri методдорду камсыз кылбоо.
  • Муттабельдүү талаалар үчүн геттерлерде көчүрмөлөрдү кайтаруу, оригиналдуу объекттерге шилтемелерди эмес.
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);
    }
}