|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.javacore.jmiimpl.javamodel; import java.lang.ref.ReferenceQueue; import java.lang.ref.WeakReference; import java.lang.ref.Reference; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; /** * * @author Martin Matula */ public class InstanceMap extends HashMap { private final ReferenceQueue queue = new ReferenceQueue(); private class InstanceReference extends WeakReference { private Object key; public InstanceReference(Object key, Object instance) { super(instance, queue); this.key = key; } public Object getKey() { return key; } } private void cleanUp() { InstanceReference reference; while ((reference = (InstanceReference) queue.poll()) != null) { Object key = reference.getKey(); Reference currentRef = (Reference) super.remove(key); if (currentRef != null && currentRef != reference && currentRef.get() != null) { super.put(key, currentRef); } } } public Object put(Object key, Object value) { cleanUp(); Object result = super.put(key, new InstanceReference(key, value)); if (result != null) { return ((InstanceReference) result).get(); } else { return result; } } public Object get(Object key) { cleanUp(); Object result = super.get(key); if (result != null) { return ((InstanceReference) result).get(); } else { return result; } } public Collection values() { ArrayList result = new ArrayList(); cleanUp(); for (Iterator it = super.values().iterator(); it.hasNext();) { result.add(((InstanceReference) it.next()).get()); } return result; } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.