package org.archstudio.bna.keys; import org.archstudio.sysutils.TypedMap; import org.eclipse.jdt.annotation.Nullable; /** * Describes a key that stores a property value of type V. * <p> * There are currently four types of keys, illustrated by the following table: * <table border='1' cellspacing='0'> * <tr> * <td>key type \ value type</td> * <th>Value</th> * <th>Reference</th> * </tr> * <tr> * <th>Key</th> * <td>{@link IThingKey}</td> * <td>{@link IThingRefKey}</td> * </tr> * <tr> * <th>Metakey</th> * <td>{@link IThingMetakey}</td> * <td>{@link IThingRefMetakey}</td> * </tr> * </table> * A metakey stores data about another key's data whereas a reference key stores references to other things. * * @param <V> * The type of value stored by the key. */ public interface IThingKey<V> extends TypedMap.Key<V> { public @Nullable V clone(@Nullable V value); public boolean isNullable(); }