怎么获取泛型运行时的实际类型????

VagueCoder 2016-06-12 10:50:44
用下面的代码获取不到,不知道哪里写错了
Type genType = obj.getClass().getGenericSuperclass();
if (!(genType instanceof ParameterizedType)) {
return Object.class;
}
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
...全文
339 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂暴的小猴儿 2016-06-12
  • 打赏
  • 举报
回复
引用 2 楼 monkeyqqqq 的回复:
java 的泛型在jdk1.5 以后添加 在运行时采用的是擦除的机制 也就是说泛型只在编译器才进行检查 运行时会向上线进行擦除 如果没有指定上线的话就会擦除为object 所以你取不到
通过父类来取 http://www.2cto.com/kf/201208/150877.html
不懂编程 2016-06-12
  • 打赏
  • 举报
回复

public class GenericTest {
	public static void main(String[] args) {
        Child name = new Child();
        
        Type genType = name.getClass().getGenericSuperclass();
        
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
        System.out.println(params);
        System.out.println(params[0]);
    }
}

class FatherClass<T> {}

class Child extends FatherClass<String> {}
输出: [Ljava.lang.reflect.Type;@15db9742 class java.lang.String
VagueCoder 2016-06-12
  • 打赏
  • 举报
回复
引用 2 楼 monkeyqqqq 的回复:
java 的泛型在jdk1.5 以后添加 在运行时采用的是擦除的机制 也就是说泛型只在编译器才进行检查 运行时会向上线进行擦除 如果没有指定上线的话就会擦除为object 所以你取不到
那((ParameterizedType) genType).getActualTypeArguments(); 这个方法是什么时候用的呢,,,
狂暴的小猴儿 2016-06-12
  • 打赏
  • 举报
回复
java 的泛型在jdk1.5 以后添加 在运行时采用的是擦除的机制 也就是说泛型只在编译器才进行检查 运行时会向上线进行擦除 如果没有指定上线的话就会擦除为object 所以你取不到
VagueCoder 2016-06-12
  • 打赏
  • 举报
回复
为什么没人呢,有木有遇见过这问题的呀呀呀呀呀呀,,,

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧