В Effective Java, 2nd Edition, Item 11 можно найти следующий пример глубокого копирования:
public class HashTable implements Cloneable {
private Entry[] buckets = ...;
private static class Entry {
final Object key;
Object value;
Entry next;
Entry(Object key, Object value, Entry next) {
this.key = key;
this.value = value;
this.next = next;
}
// Recursively copy the linked list headed by this Entry
Entry deepCopy() {
return new Entry(key, value,
next == null ? null : next.deepCopy());
}
}
@Override public HashTable clone() {
try {
HashTable result = (HashTable) super.clone();
result.buckets = new Entry[buckets.length];
for (int i = 0; i < buckets.length; i++)
if (buckets[i] != null)
result.buckets[i] = buckets[i].deepCopy();
return result;
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
Я не понимаю, как это делает глубокую копию: ключ и значение являются объектами, поэтому нет примитивных типов. Итак, насколько я понимаю, используя
// Recursively copy the linked list headed by this Entry
Entry deepCopy() {
return new Entry(key, value,
next == null ? null : next.deepCopy());
}
создает новый Entry
со ссылкой на ключ и значение исходного Entry
?
Разве глубокая копия в основном не означает: опускаться до тех пор, пока не будут достигнуты примитивные типы, а затем скопировать их в клон?
Спасибо за любой намек на это!