小编sup*_*uli的帖子

为什么java中的"超类型令牌"模式需要匿名类

在Neal Gafter的"超类型令牌"模式(http://gafter.blogspot.com/2006/12/super-type-tokens.html)中,使用匿名对象传递参数化类型:

class ReferenceType<T>{}

/* anonymous subclass of "ReferenceType" */
ReferenceType<List<Integer>> referenceType = new ReferenceType<List<Integer>>(){

};
Type superClass = b.getClass().getGenericSuperclass();
System.out.println("super type : " + superClass);
Type genericType = ((ParameterizedType)superClass).getActualTypeArguments()[0];
System.out.println("actual parameterized type : " + genericType);
Run Code Online (Sandbox Code Playgroud)

然后结果是:

super type : com.superluli.test.ReferenceType<java.util.List<java.lang.Integer>>
actual parameterized type : java.util.List<java.lang.Integer>
Run Code Online (Sandbox Code Playgroud)

我的问题是,匿名对象"referenceType"的作用是什么让它起作用?如果我定义一个"ReferenceType"的显式子类并使用它而不是匿名样式,它就不会如预期的那样.

class ReferenceType<T>{}
class ReferenceTypeSub<T> extends ReferenceType<T>{}

/* explicitly(or, named) defined subclass of "ReferenceType" */
ReferenceType<List<Integer>> b = new ReferenceTypeSub<List<Integer>>();
Type superClass = b.getClass().getGenericSuperclass();
System.out.println("super type : " + superClass);
Type …
Run Code Online (Sandbox Code Playgroud)

java generics types anonymous parameterized-types

11
推荐指数
1
解决办法
1493
查看次数

标签 统计

anonymous ×1

generics ×1

java ×1

parameterized-types ×1

types ×1