# Interface ValueHolder<E>

All Superinterfaces:
  `Serializable`

All Known Implementing Classes:
  `IndexPropertyList, PersistentObjectHolder, PersistentObjectList, PersistentObjectMap, PersistentObjectSet, ToManyList, ToManySet`

public interface ValueHolder<E> extends Serializable
Provides a level of indirection for property value access, most often used for deferred faulting of to-one relationships. A ValueHolder abstracts how a property value is obtained (fetched from DB, etc.), thus simplifying design of an object that uses it.

Here is an example of a bean property implemented using ValueHolder:

    protected ValueHolder someProperty;

    public SomeClass getSomeProperty() {
        return (SomeClass) somePropertyHolder.getValue(SomeClass.class);
    }

    public void setSomeProperty(SomeClass newValue) {
        somePropertyHolder.setValue(SomeClass.class, newValue);
    }

Since:
  1.2

- ## Method Summary

  Modifier and Type
  Method
  Description
  `E`
  `getValue()`
  Returns an object stored by this ValueHolder.
  `E`
  `getValueDirectly()`
  Retrieves ValueHolder value without triggering fault resolution.
  `void`
  `invalidate()`
  Turns a ValueHolder into a fault.
  `boolean`
  `isFault()`
  Returns true if the internal value is not yet resolved.
  `E`
  `setValue(E value)`
  Sets an object stored by this ValueHolder.
  `E`
  `setValueDirectly(E value)`
  Sets ValueHolder vaue without triggering fault resolution.

- ## Method Details

  - ### getValue

    E getValue() throws CayenneRuntimeException
    Returns an object stored by this ValueHolder.
    Throws:
      `CayenneRuntimeException`

  - ### getValueDirectly

    E getValueDirectly() throws CayenneRuntimeException
    Retrieves ValueHolder value without triggering fault resolution.
    Throws:
      `CayenneRuntimeException`

  - ### setValue

    E setValue(E value) throws CayenneRuntimeException
    Sets an object stored by this ValueHolder.
    Parameters:
      `value` - a new value of the ValueHolder.
    Returns:
      a previous value saved in the ValueHolder.
    Throws:
      `CayenneRuntimeException`

  - ### setValueDirectly

    E setValueDirectly(E value) throws CayenneRuntimeException
    Sets ValueHolder vaue without triggering fault resolution.
    Throws:
      `CayenneRuntimeException`

  - ### isFault

    boolean isFault()
    Returns true if the internal value is not yet resolved.

  - ### invalidate

    void invalidate()
    Turns a ValueHolder into a fault.