От ImmutableList javadocs:
В отличие от Collections.unmodifiableList (java.util. Список), то, которое является представлением отдельного набора, который может все еще измениться, экземпляр ImmutableList, содержит его собственные частные данные и никогда не будет изменяться. ImmutableList удобен для общедоступных статических заключительных списков ("постоянные списки") и также позволяет Вам легко сделать "защитную копию" списка предоставленной Вашему классу вызывающей стороной.
Делает это означает что:
Нет, неизменяемость применяется только к сумме и ссылки на объекты в Коллекции, и не затрагивает изменчивость объектов, которые вы помещаете в Коллекцию.
Что Immutable list выигрывает по сравнению со стандартным JDK Collections.unmodifiableList, так это то, что с помощью ImmutableList вы гарантируете, что указанные объекты, их порядок и размер не могут измениться из любого источника. С помощью Collections.unmodifiableList, если что-то еще имеет ссылку на базовый список, этот код может изменить список, даже если у вас есть ссылка на неизменяемый список.
Однако, если вы хотите истинную неизменяемость, вы должны заполнить список неизменяемыми объектами.
Использование коллекций . TunModiFialeList
создает обертку вокруг вашего списка. Если базовый список изменяется, так что делает вид вашего NUMMODIFIABLELIST.
Как говорит документация, код Google создает копию. Это более дорогие вычисления и потребляет больше памяти, но если кто-то изменяет оригинальный список, он не может повлиять на иммутаблель.
Никто из них не помешает вам изменять объект в списке, либо на полях или полях полей и т. Д.
ImmutableList
аналогичен Collections.unmodifiableList (новый ArrayList (список))
. Обратите внимание, что вновь созданный ArrayList
не назначен полю или переменной.