java中的空匿名内部类
我在调查时,发现了一个空的匿名内部类java中的空匿名内部类,java,guava,inner-classes,anonymous-class,Java,Guava,Inner Classes,Anonymous Class,我在调查时,发现了一个空的匿名内部类 TypeToken stringListTok=新的TypeToken(){}; 空匿名内部类的确切用途是什么?在哪些有用的场景中它会有所帮助?有一个用途,番石榴可能会用到。正如您所知,类型在编译后丢失,但是如果类型是在类级别指定的,那么它在编译后不会丢失,并且可以通过反射来提取。我将在一分钟内输入代码以提取类型 编辑 我不知道这个代码是否有用,但在这里 public class Reflect { public static void mai
TypeToken stringListTok=新的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);
}
}
}
公共类反映{
公共静态void main(字符串[]args){
Super aStringSuper=new Super(){};
aStringSuper.method();
Super aListSuper=新的Super(){};
方法();
}
}
超级班{
公开作废法(){
类型genericSuperclass=this.getClass().getGenericSuperclass();
ParameteredType ParameteredType=(ParameteredType)genericSuperclass;
对于(类型:ParameteredType.getActualTypeArguments()){
系统输出打印项次(类型);
}
}
}
这样做的目的是允许TypeToken
找到实例的超类-这将保留类型参数信息
例如,尽管
ArrayList
对象不知道其元素类型是String
,但由于擦除,超类信息不会丢失,因此new ArrayList{}
知道其超类是ArrayList
,而不仅仅是ArrayList
TypeToken
使用这种技术来表示构造的泛型类型。这就是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);
}
}
}