# Interface ValueObjectType<V,T>

Type Parameters:
  `V` - type of user's custom object.
  `T` - type that custom object will be serialized to/from should be backed by appropriate `ExtendedType`.

All Known Implementing Classes:
  `BigDecimalValueType, BigIntegerValueType, CharacterValueType, LocalDateTimeValueType, LocalDateValueType, LocalTimeValueType, PeriodValueType, UUIDValueType`

public interface ValueObjectType<V,T>
Descriptor and serialization helper for custom value objects that can be safely stored in the DB. Lightweight alternative for the `ExtendedType`.

Since:
  4.0

- ## Method Summary

  Modifier and Type
  Method
  Description
  `default boolean`
  `equals(V value1, V value2)`
  Allows to use special logic to compare values for equality as in rare cases it is not suffice to use default equals() method.
  `T`
  `fromJavaObject(V object)`
  `Class<T>`
  `getTargetType()`
  `Class<V>`
  `getValueType()`
  `String`
  `toCacheKey(V object)`
  Returned value should be same for objects that is logically equal.
  `V`
  `toJavaObject(T value)`

- ## Method Details

  - ### getTargetType

    Class<T> getTargetType()
    Returns:
      base type used to serialize V objects to.

  - ### getValueType

    Class<V> getValueType()
    Returns:
      type of Objects described by this ValueObjectType.

  - ### toJavaObject

    V toJavaObject(T value)
    Parameters:
      `value` - of type T
    Returns:
      java object

  - ### fromJavaObject

    T fromJavaObject(V object)
    Parameters:
      `object` - java object
    Returns:
      value of type T

  - ### toCacheKey

    String toCacheKey(V object)
    Returned value should be same for objects that is logically equal.
    Returns:
      String representation usable for cache.

  - ### equals

    default boolean equals(V value1, V value2)
    Allows to use special logic to compare values for equality as in rare cases it is not suffice to use default equals() method. Default implementation uses `Objects.equals(Object, Object)` method.
    Parameters:
      `value1` - to compare
      `value2` - to compare
    Returns:
      true if given values are equal