2012-09-22 5 views

답변

32

입니다 - 형식 인수 정보가 보존됩니다. 예를 들어

, ArrayList<String> 개체가 해당 요소 유형으로 인해 삭제에 String 것을, 슈퍼 클래스 정보가 손실 하지 것을 알고 있지는 않지만, 그래서 new ArrayList<String>{}는 슈퍼 클래스가 ArrayList<String> 아니라 ArrayList 것을 알고있다. TypeToken은이 기술을 사용하여 생성 된 제네릭 형식을 나타냅니다.

+3

나는 얼마 동안 'TypeToken'을 사용 했었지만 미묘함과 영리함을 결코 높이 평가하지 않았습니다. 꽤 굉장합니다. – Ray

18

구아바가 사용할 수있는 용도가 하나 있습니다. 아시다시피, 유형은 컴파일 후에 손실됩니다. 그러나 유형이 클래스 수준에서 정의되면 컴파일 후 손실되지 않으며 리플렉션으로 추출 할 수 있습니다. 잠시 후에 타입을 추출하는 코드를 넣을 것입니다. 코드가 어떤 사용의 경우


편집 는 모르겠지만, 여기이의 목적은 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 사용과 동일합니다. –