Updated WeakHashtable so that the null handling symantics match the superclass. Unit test contributed by Brian Stansberry.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/logging/trunk@139057 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@@ -23,6 +23,8 @@ import java.util.*;
|
|||||||
/**
|
/**
|
||||||
* <p>Implementation of <code>Hashtable</code> that uses <code>WeakReference</code>'s
|
* <p>Implementation of <code>Hashtable</code> that uses <code>WeakReference</code>'s
|
||||||
* to hold it's keys thus allowing them to be reclaimed by the garbage collector.
|
* to hold it's keys thus allowing them to be reclaimed by the garbage collector.
|
||||||
|
* This class follows the symantics of <code>Hashtable</code> as closely as possible.
|
||||||
|
* It therefore does not accept null values or keys.
|
||||||
* </p>
|
* </p>
|
||||||
* <p>
|
* <p>
|
||||||
* <strong>Usage:</strong> typical use case is as a drop-in replacement
|
* <strong>Usage:</strong> typical use case is as a drop-in replacement
|
||||||
@@ -152,6 +154,14 @@ public final class WeakHashtable extends Hashtable {
|
|||||||
*@see Hashtable
|
*@see Hashtable
|
||||||
*/
|
*/
|
||||||
public Object put(Object key, Object value) {
|
public Object put(Object key, Object value) {
|
||||||
|
// check for nulls, ensuring symantics match superclass
|
||||||
|
if (key == null) {
|
||||||
|
throw new NullPointerException("Null keys are not allowed");
|
||||||
|
}
|
||||||
|
if (value == null) {
|
||||||
|
throw new NullPointerException("Null values are not allowed");
|
||||||
|
}
|
||||||
|
|
||||||
Object result = null;
|
Object result = null;
|
||||||
Referenced lastValue = (Referenced) super.put(new Referenced(key), new Referenced(value));
|
Referenced lastValue = (Referenced) super.put(new Referenced(key), new Referenced(value));
|
||||||
if (lastValue != null) {
|
if (lastValue != null) {
|
||||||
|
|||||||
@@ -153,6 +153,24 @@ public class WeakHashtableTest extends TestCase {
|
|||||||
weakHashtable.put(anotherKey, new Long(1066));
|
weakHashtable.put(anotherKey, new Long(1066));
|
||||||
|
|
||||||
assertEquals(new Long(1066), weakHashtable.get(anotherKey));
|
assertEquals(new Long(1066), weakHashtable.get(anotherKey));
|
||||||
|
|
||||||
|
// Test compliance with the hashtable API re nulls
|
||||||
|
Exception caught = null;
|
||||||
|
try {
|
||||||
|
weakHashtable.put(null, new Object());
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
caught = e;
|
||||||
|
}
|
||||||
|
assertNotNull("did not throw an exception adding a null key", caught);
|
||||||
|
caught = null;
|
||||||
|
try {
|
||||||
|
weakHashtable.put(new Object(), null);
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
caught = e;
|
||||||
|
}
|
||||||
|
assertNotNull("did not throw an exception adding a null value", caught);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Tests public void putAll(MapÊt) */
|
/** Tests public void putAll(MapÊt) */
|
||||||
|
|||||||
Reference in New Issue
Block a user