Шаг 80.
Язык программирования Java.
Immutable и mutable объекты

На этом шаге мы поговорим про immutable и mutable объекты

В языке программирования Java объекты могут быть:

  1. Изменяемые или mutable.
  2. Неизменяемые или immutable.

У immutable объектов много полезных свойств. Но можно выделить два самых важных из них:

  1. Immutable объекты можно реализовать значительно проще чем mutable.
  2. Immutable объекты можно безопасно использовать в многопоточных программах (с ними мы познакомимся позднее).

Например, объекты классов String, Integer являются Immutable, в то время как объекты класса StringBuilder и StringBuffer являются mutable (с классами String, StringBuilder и StringBuffer мы познакомимся позднее).

Написать свои классы для того чтобы их объекты были immutable не сложно. Для этого нужно чтобы выполнялись следующие требования:

  1. Все поля такого класса должны быть константами.
  2. От такого класса нельзя наследоваться (то есть этот класс помечен ключевым словом final).
  3. Во время конструирования объекта ссылка this не должна пропасть.
  4. Любые поля, которые ссылаются на mutable объекты, а также любые внутренние классы, объекты которых являются mutable:
    1. являются приватными;
    2. никогда не возвращаются и никаким другим образом не становятся доступными вызывающим операторам;
    3. являются единственными ссылками на те объекты, на которые они ссылаются;
    4. не изменяются после конструирования состояние объектов, на которые они ссылаются.

Любой метод immutable объекта всегда возвращает новый объект. Например, пусть у нас есть следующий кусок кода:

Integer i = 1;
Integer j = i;
j++;

Этот кусок кода на самом деле эквивалентен следующему куску кода:

Integer i = new Integer(1);
Integer j = i;
j = new Integer(i.getInt() + 1);

На следующем шаге мы начнем говорить про класс String

Предыдущий шаг Содержание