Как сделать класс immutable java

Аватар пользователя Иван Полежаев
Иван Полежаев
14 апреля 2023

Для того чтобы сделать класс immutable в Java, нужно выполнить следующие шаги:

  1. Сделать все поля класса final. Это запретит изменение значений этих полей после создания объекта.
  2. Удалить все сеттеры для полей класса.
  3. Если класс содержит изменяемые объекты, то следует создать копии этих объектов в конструкторе и вернуть их через геттеры. Это защитит от изменения объектов извне.
  4. При создании объекта необходимо инициализировать все поля. Это можно сделать через конструктор, или же если все поля имеют значения по умолчанию, то можно использовать блок инициализации.
  5. Не допускайте наследования от вашего класса. Можно либо объявить класс final, либо сделать все его конструкторы приватными, чтобы нельзя было создать наследников.

Пример:

public final class ImmutableClass {
    private final int id;
    private final String name;
    private final List<Integer> numbers;

    public ImmutableClass(int id, String name, List<Integer> numbers) {
        this.id = id;
        this.name = name;
        this.numbers = new ArrayList<>(numbers);
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public List<Integer> getNumbers() {
        return new ArrayList<>(numbers);
    }
}
  • В данном примере класс содержит три поля: id, name и numbers. Все они помечены как final.
  • В конструкторе происходит копирование объекта numbers, чтобы сохранить его неизменным.
  • Геттеры возвращают копии полей для предотвращения изменения объекта извне.
  • Класс объявлен как final, чтобы запретить наследование от него.
0 0
Основы Java за 14 дней
  • 62 урока в онлайн-тренажере
  • 4 живых вебинара и масскодинг
  • Помощь наставника на весь период обучения

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Похожие вопросы