the Guava library을 찾고 있었는데 TypeToken
에 빈 익명 내부 클래스가 나타났습니다. 정확히 무엇을자바의 익명 내부 클래스
TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
을 빈 익명의 내부 클래스의 사용이 도움이 될 수있는 유용한 시나리오는 무엇입니까?
the Guava library을 찾고 있었는데 TypeToken
에 빈 익명 내부 클래스가 나타났습니다. 정확히 무엇을자바의 익명 내부 클래스
TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
을 빈 익명의 내부 클래스의 사용이 도움이 될 수있는 유용한 시나리오는 무엇입니까?
입니다 - 형식 인수 정보가 보존됩니다. 예를 들어
,ArrayList<String>
개체가 해당 요소 유형으로 인해 삭제에
String
것을, 슈퍼 클래스 정보가 손실
하지 것을 알고 있지는 않지만, 그래서
new ArrayList<String>{}
는 슈퍼 클래스가
ArrayList<String>
아니라
ArrayList
것을 알고있다.
TypeToken
은이 기술을 사용하여 생성 된 제네릭 형식을 나타냅니다.
구아바가 사용할 수있는 용도가 하나 있습니다. 아시다시피, 유형은 컴파일 후에 손실됩니다. 그러나 유형이 클래스 수준에서 정의되면 컴파일 후 손실되지 않으며 리플렉션으로 추출 할 수 있습니다. 잠시 후에 타입을 추출하는 코드를 넣을 것입니다. 코드가 어떤 사용의 경우
편집 는 모르겠지만, 여기이의 목적은 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);
}
}
}
실제 TypeToken 사용과 동일합니다. –
나는 얼마 동안 'TypeToken'을 사용 했었지만 미묘함과 영리함을 결코 높이 평가하지 않았습니다. 꽤 굉장합니다. – Ray