2012-09-22 25 views

答えて

32

だ場合、私は知りません - 型引数情報は保持されます。例えば

ArrayList<String>オブジェクトがその要素の型が原因消去し、 Stringであることを、スーパークラスの情報が失われ ないであることを知りませんがが、そう new ArrayList<String>{}は、そのスーパークラスが ArrayList<String>だけでなく、 ArrayListであることを知っています。 TypeTokenは、その技法を使用して、構築されたジェネリック型を表します。

+3

私はしばらくの間、 'TypeToken'を使ってきましたが、繊細さと賢さを決して高く評価したことはありません。それはかなり素晴らしいです – Ray

18

Guavaが使用する可能性のある用途が1つあります。ご存じのように、コンパイル後に型が失われますが、型がクラスレベルで宣言されていれば、コンパイル後に型が失われることはなく、リフレクションによって抽出できます。 1分で型を抽出するコードを記述します。


編集 これの目的はTypeTokenスーパークラスのインスタンスのを見つけることができるようにすることですコードは、任意の使用であるが、ここでは

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

実際のTypeTokenの使用と同じです。 –

関連する問題