public <T> ObjectConstructor<T> get(TypeToken<T> typeToken) { finalTypetype= typeToken.getType(); final Class<? super T> rawType = typeToken.getRawType();
// first try an instance creator // types must agree final InstanceCreator<T> typeCreator = (InstanceCreator<T>) instanceCreators.get(type); if (typeCreator != null) { returnnewObjectConstructor<T>() { @Overridepublic T construct() { return typeCreator.createInstance(type); } }; }
// Next try raw type match for instance creators // types must agree final InstanceCreator<T> rawTypeCreator = (InstanceCreator<T>) instanceCreators.get(rawType); if (rawTypeCreator != null) { returnnewObjectConstructor<T>() { @Overridepublic T construct() { return rawTypeCreator.createInstance(type); } }; }