# Class ValueExpression

java.lang.Object
jakarta.el.Expression
jakarta.el.ValueExpression

All Implemented Interfaces:
  `Serializable`

public abstract class ValueExpression extends Expression
Represents a parsed EL expression that can be evaluated to produce a value.

A value expression is created by parsing an EL expression string and can be evaluated multiple times in different contexts. It supports reading values, writing values, and introspecting the expression's type and mutability.

Since:
  EL 2.1
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ValueExpression()`
  Constructs a new value expression.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract Class<?>`
  `getExpectedType()`
  Returns the expected type of the result of this expression.
  `abstract Class<?>`
  `getType(ELContext context)`
  Returns the type of the result produced by evaluating this expression.
  `abstract <T> T`
  `getValue(ELContext context)`
  Evaluates this expression and returns the result.
  `ValueReference`
  `getValueReference(ELContext context)`
  Returns a reference to the resolved property for this expression.
  `abstract boolean`
  `isReadOnly(ELContext context)`
  Determines whether the property referenced by this expression is read-only.
  `abstract void`
  `setValue(ELContext context, Object value)`
  Sets the value of the property referenced by this expression.

  ### Methods inherited from class Expression

  `equals, getExpressionString, hashCode, isLiteralText`

  ### Methods inherited from class Object

  `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ValueExpression

    public ValueExpression()
    Constructs a new value expression.

- ## Method Details

  - ### getValue

    public abstract <T> T getValue(ELContext context)
    Evaluates this expression and returns the result.
    Type Parameters:
      `T` - The expected type for the result of evaluating this value expression
    Parameters:
      `context` - The EL context for this evaluation
    Returns:
      The result of evaluating this value expression
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
      `ELException` - Wraps any exception throw whilst resolving a property or variable

  - ### setValue

    public abstract void setValue(ELContext context, Object value)
    Sets the value of the property referenced by this expression.
    Parameters:
      `context` - The EL context for this evaluation
      `value` - The value to set the property to which this value expression refers
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If a property/variable resolution failed because no match was found
      `PropertyNotWritableException` - If a property/variable resolution failed because a match was found but was not writable
      `ELException` - Wraps any exception throw whilst resolving a property or variable

  - ### isReadOnly

    public abstract boolean isReadOnly(ELContext context)
    Determines whether the property referenced by this expression is read-only.
    Parameters:
      `context` - The EL context for this evaluation
    Returns:
      `true` if this expression is read only otherwise `false`
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
      `ELException` - Wraps any exception throw whilst resolving a property or variable

  - ### getType

    public abstract Class<?> getType(ELContext context)
    Returns the type of the result produced by evaluating this expression.
    Parameters:
      `context` - The EL context for this evaluation
    Returns:
      The type of the result of this value expression
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
      `ELException` - Wraps any exception throw whilst resolving a property or variable

  - ### getExpectedType

    public abstract Class<?> getExpectedType()
    Returns the expected type of the result of this expression.
    Returns:
      The expected result type, or `Object.class` if no specific type is expected

  - ### getValueReference

    public ValueReference getValueReference(ELContext context)
    Returns a reference to the resolved property for this expression.

    This default implementation always returns `null`. Subclasses should override this method to provide the resolved base object and property.

    Parameters:
      `context` - The EL context for this evaluation
    Returns:
      This default implementation always returns `null`
    Since:
      EL 2.2