Sobes.tech
Junior

Javaда иммутабилдүүлүк кандай камсыз кылынат?

sobes.tech AI

AIден жооп

Javaда өзгөрүлмө болуу төмөнкү жолдор менен камсыздалат:

  1. Класс final деп жарыялоо: Класс мурас алууга болбойт, бул өзгөрүлмө подкласс түзүүнүн алдын алат.

  2. Бардык талааларды final деп жарыялоо: Талаанын мааниси бир гана жолу берилет (инициализация учурунда же конструктордо) жана объект түзүлгөндөн кийин өзгөртүлбөйт.

  3. Талалардын жеке болушу: Талалар private болушу керек, ошондуктан түздөн-түз кирүү жана өзгөртүү сырттан болбойт.

  4. Setterлер же объекттин абалын өзгөртүүчү методдордун жоктугу: Класс түзүлгөндөн кийин талаалардын маанилерин өзгөртө турган коомдук методдорду камсыз кылбоо керек.

  5. Өзгөрүлмө талаалар менен туура иштөө: Эгер класс өзгөрүлмө объекттерге шилтемелерди камтыса (мисалы, List же өзүнүн өзгөрүлмө классы), анда:

    • аларды баштапкы түзүүдө көчүрмөлөрүн түзүү керек (конструктордо)
    • сырттан өзгөртүүнү алдын алуу үчүн getterлерде көчүрмөлөрүн кайтаруу керек.
public final class ImmutableExample { // акыркы класс

    private final String name; // акыркы жана жеке талаа

    private final List<String> items; // акыркы жана жеке талаа

    public ImmutableExample(String name, List<String> items) {
        this.name = name;
        // корголгон көчүрмө түзүү
        this.items = new ArrayList<>(items);
    }

    public String getName() {
        return name;
    }

    public List<String> getItems() {
        // корголгон көчүрмө кайтаруу
        return Collections.unmodifiableList(new ArrayList<>(items));
    }

    // өзгөртүүнү камсыздаган setterлер же методдор жок
}

Javaда ички өзгөрүлмө эмес класс мисалдары: String, негизги түрлөрдүн обертка класстары (Integer, Long жана башка), BigInteger, BigDecimal.