1
0

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:
Robert Burrell Donkin
2004-11-11 21:43:43 +00:00
parent 7a03f06584
commit c24811762a
2 changed files with 28 additions and 0 deletions

View File

@@ -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) {

View File

@@ -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) */