# Package org.optaplanner.core.api.domain.variable

Domain annotations and support classes for a planning variable.

- Interface Summary
  Interface | Description
  --- | ---
  CustomShadowVariable.NullVariableListener | Workaround for annotation limitation in `CustomShadowVariable.variableListenerClass()`.
  PlanningVariable.NullStrengthComparator | Workaround for annotation limitation in `PlanningVariable.strengthComparatorClass()`.
  PlanningVariable.NullStrengthWeightFactory | Workaround for annotation limitation in `PlanningVariable.strengthWeightFactoryClass()`.
  PlanningVariableReference.NullEntityClass | Workaround for annotation limitation in `PlanningVariableReference.entityClass()`.
  VariableListener<Solution_,​Entity_> | Changes shadow variables when a genuine planning variable changes.

- Enum Summary
  Enum | Description
  --- | ---
  PlanningVariableGraphType |

- Annotation Types Summary
  Annotation Type | Description
  --- | ---
  AnchorShadowVariable | Specifies that a bean property (or a field) is the anchor of a chained `PlanningVariable`, which implies it's a shadow variable.
  CustomShadowVariable | Specifies that a bean property (or a field) is a custom shadow of 1 or more `PlanningVariable`'s.
  InverseRelationShadowVariable | Specifies that a bean property (or a field) is the inverse of a `PlanningVariable`, which implies it's a shadow variable.
  PlanningVariable | Specifies that a bean property (or a field) can be changed and should be optimized by the optimization algorithms.
  PlanningVariableReference | A reference to a genuine `PlanningVariable` or a shadow variable.