package net.enilink.komma.core;
/**
* Represents an entity variable whose value is eagerly cached using an entity's
* {@link IReference}. This allows values to be shared between different
* instances of the same behaviour class.
*
* @param <T>
* Value type represented by this variable.
*/
public interface EntityVar<T> {
/**
* Sets the entity variable to the specified value.
*
* @param value
* the value to be stored in this entity variable.
*/
void set(T value);
/**
* Returns the value of this entity variable.
*
* @return the value of this entity variable
*/
T get();
/**
* Removes the value of this entity variable. Invoking this method is
* equivalent to using <code>set(null)</code>.
*/
void remove();
}