Hallo!
Ich wollte mal wissen, wie sich denn eine TreeMap selber klont. Deshalb hab ich mir die source dateien von sun angeschaut.
und hier die clone() Methode:
Wie wir sehen, greift die clone() Methode aus TreeMap mit
und hier die clone() Methode:
Greift die TreeMap mit super.clone() also auf diese Methode zurück? Wenn ja, worauf greift dann in AbstractMap super.clone() zurück? AbstractMap extended ja keine Klasse sondern implementiert nur eine Interface...
Ich wollte mal wissen, wie sich denn eine TreeMap selber klont. Deshalb hab ich mir die source dateien von sun angeschaut.
Code:
public class TreeMap<K,V>
extends AbstractMap<K,V>
implements NavigableMap<K,V>, Cloneable, java.io.Serializable
Code:
public Object clone() {
TreeMap<K,V> clone = null;
try {
clone = (TreeMap<K,V>) super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
// Put clone into "virgin" state (except for comparator)
clone.root = null;
clone.size = 0;
clone.modCount = 0;
clone.entrySet = null;
clone.navigableKeySet = null;
clone.descendingMap = null;
// Initialize clone with our mappings
try {
clone.buildFromSorted(size, entrySet().iterator(), null, null);
} catch (java.io.IOException cannotHappen) {
} catch (ClassNotFoundException cannotHappen) {
}
auf die clone() methode der Obeklasse zurück, und präpariert dann die geklonte Map noch vorm returnen. Ich muss mir also die Oberklasse anschaun, um zu verstehen, wie sich die TreeMap clont - also die AbstractMap ??super.clone()
Code:
public abstract class AbstractMap<K,V> implements Map<K,V> {
Code:
protected Object clone() throws CloneNotSupportedException {
AbstractMap<K,V> result = (AbstractMap<K,V>)super.clone();
result.keySet = null;
result.values = null;
return result;
}