1323. Отличие Unmodifiable от Immutable
Unmodifiable и Immutable - это два разных понятия в контексте Java и они имеют различные свойства и использование.
Unmodifiable (неизменяемый) относится к коллекциям, которые не могут быть изменены после создания. Это означает, что вы не можете добавлять, удалять или изменять элементы в такой коллекции. Однако, сама коллекция может быть изменена, например, вы можете изменить элементы внутри коллекции, но вы не можете изменить саму коллекцию (например, добавить или удалить элементы). Коллекции, созданные с помощью методов Collections.unmodifiableXXX(), являются неизменяемыми.
Immutable (неизменяемый) относится к объектам, которые не могут быть изменены после создания. Это означает, что вы не можете изменить значения полей объекта после его создания. Классы, объявленные с ключевым словом final или поля, объявленные с ключевым словом final, являются неизменяемыми. Неизменяемые объекты обеспечивают безопасность потоков и предотвращают неожиданные изменения состояния объекта.
Таким образом, основное различие между Unmodifiable и Immutable заключается в том, что Unmodifiable относится к коллекциям, которые не могут быть изменены после создания, в то время как Immutable относится к объектам, которые не могут быть изменены после создания.
Примеры использования:
Unmodifiable:
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("C++"); // Вызовет UnsupportedOperationException
Immutable:
final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Person person = new Person("John", 25);
person.setName("Mike"); // Не допустимо, так как объект неизменяемый
Важно отметить, что Unmodifiable и Immutable не являются взаимозаменяемыми понятиями. Unmodifiable относится к коллекциям, в то время как Immutable относится к объектам.
Если вам понравилось, буду признателен за подписку.