Package org.apache.tapestry5.commons.internal.services

## Class TypeCoercerImpl

- java.lang.Object
- - org.apache.tapestry5.commons.internal.util.LockSupport
  - - org.apache.tapestry5.commons.internal.services.TypeCoercerImpl

- All Implemented Interfaces:
    `TypeCoercer`

      public class TypeCoercerImpl
      extends LockSupport
      implements TypeCoercer

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `TypeCoercerImpl​(java.util.Map<CoercionTuple.Key,​CoercionTuple> tuples)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `clearCache()` | Clears cached information stored by the TypeCoercer.
    `java.lang.Object` | `coerce​(java.lang.Object input, java.lang.Class targetType)` | Performs a coercion from an input type to a desired output type.
    `<S,​T> java.lang.String` | `explain​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType)` | Used primarily inside test suites, this method performs the same steps as `TypeCoercer.coerce(Object, Class)`, but returns a string describing the series of coercions, such as "Object --> String --> Long --> Integer".
    `<S,​T> Coercion<S,​T>` | `getCoercion​(java.lang.Class<S> sourceType, java.lang.Class<T> targetType)` | Given a source and target type, computes the coercion that will be used.

    - ### Methods inherited from class org.apache.tapestry5.commons.internal.util.LockSupport

      `acquireReadLock, downgradeWriteLockToReadLock, releaseReadLock, releaseWriteLock, takeWriteLock, upgradeReadLockToWriteLock`

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### TypeCoercerImpl

          public TypeCoercerImpl​(java.util.Map<CoercionTuple.Key,​CoercionTuple> tuples)

  - ### Method Detail

    - #### coerce

          public java.lang.Object coerce​(java.lang.Object input,
                                         java.lang.Class targetType)

      Description copied from interface: `TypeCoercer`
      Performs a coercion from an input type to a desired output type. When the target type is a primitive, the actual conversion will be to the equivalent wrapper type. In some cases, the TypeCoercer will need to search for an appropriate coercion, and may even combine existing coercions to form new ones; in those cases, the results of the search are cached. The TypeCoercer also caches the results of a coercion search.
      Specified by:
        `coerce` in interface `TypeCoercer`
        `targetType` - defines the target type
      Returns:
        the coerced value

    - #### getCoercion

          public <S,​T> Coercion<S,​T> getCoercion​(java.lang.Class<S> sourceType,
                                                             java.lang.Class<T> targetType)

      Description copied from interface: `TypeCoercer`
      Given a source and target type, computes the coercion that will be used. Note: holding the returned coercion past the time when the cache is cleared can cause a memory leak, especially in the context of live reloading (wherein holding a reference to a single class make keep an entire ClassLoader from being reclaimed).
      Specified by:
        `getCoercion` in interface `TypeCoercer`
      Type Parameters:
        `S` - source type (input)
        `T` - target type (output)
      Parameters:
        `sourceType` - type to coerce from
        `targetType` - defines the target type
      Returns:
        the coercion that will ultimately be used

    - #### explain

          public <S,​T> java.lang.String explain​(java.lang.Class<S> sourceType,
                                                      java.lang.Class<T> targetType)

      Description copied from interface: `TypeCoercer`
      Used primarily inside test suites, this method performs the same steps as `TypeCoercer.coerce(Object, Class)`, but returns a string describing the series of coercions, such as "Object --> String --> Long --> Integer".
      Specified by:
        `explain` in interface `TypeCoercer`
      Type Parameters:
        `S` - source type (input)
        `T` - target type (output)
      Parameters:
        `sourceType` - the source coercion type (use void.class for coercions from null)
        `targetType` - defines the target type
      Returns:
        a string identifying the series of coercions, or the empty string if no coercion is necessary

    - #### clearCache

          public void clearCache()

      Description copied from interface: `TypeCoercer`
      Clears cached information stored by the TypeCoercer.
      Specified by:
        `clearCache` in interface `TypeCoercer`