2012-09-22 19 views

Odpowiedz

32

Celem tego jest umożliwienie TypeToken wybrać superklasę instancji - która zachowa informacje o argumentach typu.

Na przykład, chociaż obiekt ArrayList<String> nie wie, że jego typ elementu jest String, z powodu usunięcia, nadklasą informacje nie stracił, więc new ArrayList<String>{} wie, że jej nadklasy jest ArrayList<String>, nie tylko ArrayList. TypeToken używa tej techniki do przedstawienia skonstruowanego rodzaju generycznego.

+3

Używam 'TypeToken' przez jakiś czas, ale nigdy nie doceniłem subtelności i sprytu. To jest naprawdę niesamowite – Ray

18

Jest jeden użytek, który może wykorzystać Guava. Jak wiadomo, typy są tracone po kompilacji, ale jeśli typ jest spermied na poziomie klasy, to nie jest stracony po kompilacji i może zostać wyodrębniony przez odbicie. Wezwę kod, by wyodrębnić typ w minutę.


Edit ja nie wiem, czy kod jest jakiegokolwiek użytku, ale tutaj jest to

public class Reflect { 

    public static void main(String[] args) { 
     Super<String> aStringSuper = new Super<String>() {}; 
     aStringSuper.method(); 

     Super<List<Integer>> aListSuper = new Super<List<Integer>>() {}; 
     aListSuper.method(); 
    } 

} 

class Super<T> { 

    public void method() { 
     Type genericSuperclass = this.getClass().getGenericSuperclass(); 
     ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass; 
     for(Type type : parameterizedType.getActualTypeArguments()) { 
      System.out.println(type); 
     } 
    } 
} 
+0

To faktyczne użycie TypToken. –

Powiązane problemy