Jackson can take not only type-erased class as target type, but also TypeReference which uses the usual "super type token" pattern. From Jackson FAQ:
List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });
and this works for all kinds of generic types, not just Maps and Collections. This in case you were thinking of generic types; so that you just have a single class but multiple parametric variations.
But it sounds like maybe what you want is actually support for deserializing polymorphic types; and this is also support (as of Jackson 1.5, see http://wiki.fasterxml.com/JacksonPolymorphicDeserialization).
EDIT: given sample classes in the other answer, Jackson way would be to do:
import org.codehaus.jackson.annotate.JsonTypeInfo;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public abstract class Message
{
protected Message(){ }
}
and deserialize by:
Message msg = objectMapper.readValue(json, Message.class);
to get any sub-class of Message. And serialize using 'objectMapper.writeValue();'