Sobes.tech
Junior

Объектҳои тағйирнопазири (immutable) чистанд?

sobes.tech AI

Ҷавоб аз AI

Объектҳо, ҳолати онҳо пас аз эҷод кардан тағирнопазир аст. Ҳар даъвати тағир додан, ҳамеша объекти нав месозад.

Масаланҳои синфҳои тағирнопазир дар Java:

  • String
  • Қаппакҳои асосӣ (Integer, Long, Boolean ва ғайра)
  • Баъзе коллексияҳо (Collections.unmodifiableList(), ImmutableList аз Guava)

Фоидаҳо:

  • Бехатарии сими (назар ба ҳамзамон дастрасӣ, синхрон кардан лозим нест).
  • Осонии истифода (ҳолати объект осон фаҳмидан аст).
  • Мутобиқанд ҳамчун калидҳо дар 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);
    }
}