blob: 0c849163685d44c48c42d76da7e17bd4632fb8ba [file] [log] [blame]
package org.codehaus.jackson.map.deser;
import org.codehaus.jackson.map.*;
/**
* Interface for providers of {@link ValueInstantiator} instances.
* Implemented when an object wants to provide custom value instantiators,
* usually to support custom value types with alternate constructors, or
* which need specified post-processing after construction but before
* binding data.
*
* @since 1.9
*/
public interface ValueInstantiators
{
/**
* Method called to find the {@link ValueInstantiator} to use for creating
* instances of specified type during deserialization.
* Note that a default value instantiator is always created first and passed;
* if an implementation does not want to modify or replace it, it has to return
* passed instance as is (returning null is an error)
*
* @param config Deserialization configuration in use
* @param beanDesc Additional information about POJO type to be instantiated:
* description will always be of type
* {@link org.codehaus.jackson.map.introspect.BasicBeanDescription} (that is,
* safe to cast to this more specific type)
* @param defaultInstantiator Instantiator that will be used if no changes are made;
* passed to allow custom instances to use annotation-provided information
* (note, however, that earlier {@link ValueInstantiators} may have changed it to
* a custom instantiator already)
*
* @return Instantiator to use; either <code>defaultInstantiator</code> that was passed,
* or a custom variant; can not be null.
*/
public ValueInstantiator findValueInstantiator(DeserializationConfig config,
BeanDescription beanDesc, ValueInstantiator defaultInstantiator);
/**
* Basic "NOP" implementation that can be used as the base class for custom implementations.
* Safer to extend (instead of implementing {@link ValueInstantiators}) in case later
* Jackson versions add new methods in base interface.
*/
public static class Base implements ValueInstantiators
{
@Override
public ValueInstantiator findValueInstantiator(DeserializationConfig config,
BeanDescription beanDesc, ValueInstantiator defaultInstantiator) {
return defaultInstantiator;
}
}
}