返回信息流为了获取泛型类型的参数类型,demo如下
class TypeReference<T> {
private final Type type;
public TypeReference() {
Class clz = getClass();
Type superClass = clz.getGenericSuperclass();
//clz.getGenericInfo();
type = ((ParameterizedType) superClass).getActualTypeArguments()[0];
}
public Type getType() {
return type;
}
}
main函数调用如下:
new TypeReference<List<String>>().getType();
对此,对clz和superClass的值不理解,求大神帮助
这是一条镜像帖。来源:北邮人论坛 / java / #41636同步于 2015/6/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
泛型的superclass疑问,高手请进!
flyup
2015/6/14镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不懂帮顶
【 在 flyup (飞哥) 的大作中提到: 】
: 为了获取泛型类型的参数类型,demo如下
: class TypeReference<T> {
: ...................
好像getActualTypeArguments这个函数可以,不过没试过。
【 在 kayla 的大作中提到: 】
: 泛型在运行时能获取到参数类型?
你虽然定义了泛型T,但是没看你在哪儿用过,构造函数跟普通构造函数没什么区别,所以不知道你的代码想表达什么。
clz的值后面有个&1,我猜是为了跟类加载之后JVM自动创建的class对象以示区分,因为class本身也是对象。或许你把该类改成静态的就不会有&1,手机码字,有待验证。
后面superclass的值,不清楚。一般在编译的时候,会自动将T换成确定的某个type,而且将整个一块儿看作一个类,所以会有嵌套的尖括号。