Advertisement
Guest User

Custom ParameterizedType to work with generics in Gson

a guest
Jan 3rd, 2013
2,439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.36 KB | None | 0 0
  1. package stackoverflow.generics;
  2.  
  3. import java.lang.reflect.ParameterizedType;
  4. import java.lang.reflect.Type;
  5. import java.util.List;
  6.  
  7. import com.google.gson.Gson;
  8.  
  9. public class TypeTokenAndGenerics {
  10.  
  11.     public static void main(String[] args) {
  12.         d(new Factory<Integer>().deserialize("[1, 2, 3, 4]", Integer.class));
  13.         d(new Factory<String>().deserialize("[\"foo\", \"bar\", \"baz\"]", String.class));
  14.         d(new Factory<Color>().deserialize("[{\"label\": \"red\" }, {\"label\": \"blue\"}]", Color.class));
  15.     }
  16.    
  17.     static void d(List<?> list) {
  18.         System.out.println(java.util.Arrays.toString(list.toArray()));
  19.     }
  20.    
  21.     static class Factory<T> {
  22.         public List<T> deserialize(String json, Class<T> klass) {
  23.             Gson gson = new Gson();
  24.             return gson.fromJson(json, new ListOfSomething<T>(klass));
  25.         }
  26.     }
  27.    
  28.     static class ListOfSomething<X> implements ParameterizedType {
  29.  
  30.         private Class<?> wrapped;
  31.        
  32.         public ListOfSomething(Class<X> wrapped) {
  33.             this.wrapped = wrapped;
  34.         }
  35.        
  36.         @Override
  37.         public Type[] getActualTypeArguments() {
  38.             return new Type[] {wrapped};
  39.         }
  40.  
  41.         @Override
  42.         public Type getRawType() {
  43.             return List.class;
  44.         }
  45.  
  46.         @Override
  47.         public Type getOwnerType() {
  48.             return null;
  49.         }
  50.        
  51.     }
  52.    
  53.     static class Color {
  54.        
  55.         public String label = "EMPTY";
  56.        
  57.         @Override
  58.         public String toString() {
  59.             return label;
  60.         }
  61.     }
  62.  
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement