package edu.stanford.nlp.util;
import java.util.Set;
/**
* Type signature for a class that supports the basic operations required
* of a typesafe heterogeneous map.
*
* @author dramage
*/
public interface TypesafeMap {
/**
* Base type of keys for the map. The classes that implement Key are
* the keys themselves - not instances of those classes.
*
* @param <VALUE> The type of the value associated with this key.
*/
interface Key<VALUE> { }
/**
* Returns the value associated with the given key or null if
* none is provided.
*/
<VALUE> VALUE get(Class<? extends Key<VALUE>> key);
/**
* Associates the given value with the given type for future calls
* to get. Returns the value removed or null if no value was present.
*/
<VALUE> VALUE set(Class<? extends Key<VALUE>> key, VALUE value);
/**
* Removes the given key from the map, returning the value removed.
*/
<VALUE> VALUE remove(Class<? extends Key<VALUE>> key);
/**
* Collection of keys currently held in this map. Some implementations may
* have the returned set be immutable.
*/
Set<Class<?>> keySet();
//public Set<Class<? extends Key<?>>> keySet();
/**
* Returns true if contains the given key.
*/
<VALUE> boolean containsKey(Class<? extends Key<VALUE>> key);
/**
* Returns the number of keys in the map.
*/
int size();
}