Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package stackoverflow.generics;
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- import java.util.List;
- import com.google.gson.Gson;
- public class TypeTokenAndGenerics {
- public static void main(String[] args) {
- d(new Factory<Integer>().deserialize("[1, 2, 3, 4]", Integer.class));
- d(new Factory<String>().deserialize("[\"foo\", \"bar\", \"baz\"]", String.class));
- d(new Factory<Color>().deserialize("[{\"label\": \"red\" }, {\"label\": \"blue\"}]", Color.class));
- }
- static void d(List<?> list) {
- System.out.println(java.util.Arrays.toString(list.toArray()));
- }
- static class Factory<T> {
- public List<T> deserialize(String json, Class<T> klass) {
- Gson gson = new Gson();
- return gson.fromJson(json, new ListOfSomething<T>(klass));
- }
- }
- static class ListOfSomething<X> implements ParameterizedType {
- private Class<?> wrapped;
- public ListOfSomething(Class<X> wrapped) {
- this.wrapped = wrapped;
- }
- @Override
- public Type[] getActualTypeArguments() {
- return new Type[] {wrapped};
- }
- @Override
- public Type getRawType() {
- return List.class;
- }
- @Override
- public Type getOwnerType() {
- return null;
- }
- }
- static class Color {
- public String label = "EMPTY";
- @Override
- public String toString() {
- return label;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement