Сценарий:
У меня есть код, который изменяет объекты, и другой код, который этого не делает, то есть он рассматривает объекты, с которыми работает, как неизменяемые.
Но в настройке с параллельными рабочими задачами это работает надежно, только если можно быть уверенным, что некоторые объекты не будут изменены из стороннего кода или кода библиотеки, что может произойти, если есть ссылки вне области моего кода.
Одна возможность - всегда передавать копии вместо оригинальных объектов. Но иногда можно было бы сэкономить память и время, если бы просто знал, что нет других ссылок на объект, задерживающийся в другом месте.
Вот псевдокодированный универсальный метод «заморозки», который берет объект и возвращает идентичный «неизменный»:
public <T> T freeze(T x) {
if immutable anyway then return x
else if "not referenced in other objects" then return x
else if x clonable then return clone of x
else if x serializable then return serialized/deserialized x
else ....
}
То, что я ищу, это часть "нет ссылок в других объектах".
Есть предложения?