class FakeParameterizedTypeReference<T> extends ParameterizedTypeReference<T> { @Override public Type getType() { Type [] responseWrapperActualTypes = {MyClass.class}; ParameterizedType responseWrapperType = new ParameterizedTypeImpl( ResponseWrapper.class, responseWrapperActualTypes, null ); return responseWrapperType; } }
final Type innerType = getParameterUpperBound(0, (ParameterizedType) returnType); ParameterizedType parameterizedType = new AwesomeResponseType(innerType);
private static class MultisetDeserializer implements JsonDeserializer<Multiset<?>> { @Override public Multiset<?> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException { ParameterizedType parameterizedType = (ParameterizedType) type; Type[] typeArguments = parameterizedType.getActualTypeArguments(); ParameterizedType listType = new ListParameterizedType(typeArguments); List<?> list = context.deserialize(json, listType); return HashMultiset.create(list); } }