[COLLECTIONS-441] Cleanup MultiKeyMap, remove duplicated field map.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/collections/trunk@1449519 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Thomas Neidhart 2013-02-24 18:17:27 +00:00
parent 6dc045c4ed
commit 89d8791f05
7 changed files with 42 additions and 9 deletions

View File

@ -22,6 +22,9 @@
<body>
<release version="4.0" date="TBA" description="Next release">
<action issue="COLLECTIONS-441" dev="tn" type="fix" due-to="Thomas Vahrst">
MultiKeyMap.clone() now correctly calls super.clone().
</action>
<action issue="COLLECTIONS-312" dev="tn" type="fix" due-to="Peter Lawrey, Gary Gregory">
Use of final keyword where applicable, minor performance improvements by properly
initializing the capacity of newly created collections when known in advance.

View File

@ -16,6 +16,9 @@
*/
package org.apache.commons.collections.map;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Map;
@ -78,10 +81,6 @@ public class MultiKeyMap<K, V> extends AbstractMapDecorator<MultiKey<? extends K
/** Serialisation version */
private static final long serialVersionUID = -1788199231038721040L;
/** The decorated map */
//keep this member around for serialization BC with older Collections releases assuming we want to do that
protected AbstractHashedMap<MultiKey<? extends K>, V> map;
//-----------------------------------------------------------------------
/**
* Decorates the specified map to add the MultiKeyMap API and fast query.
@ -819,9 +818,14 @@ public class MultiKeyMap<K, V> extends AbstractMapDecorator<MultiKey<? extends K
*
* @return a shallow clone
*/
@SuppressWarnings("unchecked")
@Override
public MultiKeyMap<K, V> clone() {
return new MultiKeyMap<K, V>(decorated().clone());
try {
return (MultiKeyMap<K, V>) super.clone();
} catch (CloneNotSupportedException e) {
throw new InternalError();
}
}
/**
@ -867,6 +871,32 @@ public class MultiKeyMap<K, V> extends AbstractMapDecorator<MultiKey<? extends K
*/
@Override
protected AbstractHashedMap<MultiKey<? extends K>, V> decorated() {
return map;
return (AbstractHashedMap<MultiKey<? extends K>, V>) super.decorated();
}
//-----------------------------------------------------------------------
/**
* Write the map out using a custom routine.
*
* @param out the output stream
* @throws IOException
*/
private void writeObject(final ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeObject(map);
}
/**
* Read the map in using a custom routine.
*
* @param in the input stream
* @throws IOException
* @throws ClassNotFoundException
*/
@SuppressWarnings("unchecked")
private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
map = (Map<MultiKey<? extends K>, V>) in.readObject();
}
}

View File

@ -441,18 +441,18 @@ public class MultiKeyMapTest<K, V> extends AbstractIterableMapTest<MultiKey<? ex
//-----------------------------------------------------------------------
@Override
public String getCompatibilityVersion() {
return "3.1";
return "4.0";
}
// public void testCreate() throws Exception {
// resetEmpty();
// writeExternalFormToDisk(
// (java.io.Serializable) map,
// "D:/dev/collections/data/test/MultiKeyMap.emptyCollection.version3.1.obj");
// "src/test/resources/data/test/MultiKeyMap.emptyCollection.version4.0.obj");
// resetFull();
// writeExternalFormToDisk(
// (java.io.Serializable) map,
// "D:/dev/collections/data/test/MultiKeyMap.fullCollection.version3.1.obj");
// "src/test/resources/data/test/MultiKeyMap.fullCollection.version4.0.obj");
// }
/**