В Java, скажем, у вас есть класс, который упаковывает ArrayList
(или любую коллекцию) объектов.
Как бы вы вернули один из этих объектов так, чтобы вызывающая сторона не увидела никаких будущих изменений объекта, сделанного в ArrayList?
т.е. Вы хотите вернуть глубокую копию объекта, но не знаете, является ли он клонируемым.