TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
空匿名内部类的确切用途是什么?它有哪些有用的场景?
TypeToken<List<String>> stringListTok = new TypeToken<List<String>>() {};
空匿名内部类的确切用途是什么?它有哪些有用的场景?
这样做的目的是允许TypeToken
找到实例的超类——这将保留类型参数信息。
例如,虽然一个ArrayList<String>
对象不知道它的元素类型是String
,但由于擦除,超类信息没有丢失,所以new ArrayList<String>{}
知道它的超类是ArrayList<String>
,而不仅仅是ArrayList
。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);
}
}
}