标签:
前言:坚信自己坚信的,坚持自己坚持的,永远选择相信自己。
在上篇中,我们简单给大家讲解了如何利用反射来获取普通类型的类的使用,今天给大家讲解下,有关如何使用反射来获取泛型中的信息。提前提个醒,本篇文章内容稍难,大家可能需要多看几篇。
这篇文章将大量用到泛型的知识,如果对泛型声明及填充不太了解的同学,请先看完《夯实JAVA基本之一 —— 泛型详解系列》
//针对泛型父类而设计 public Type getGenericSuperclass();下面我们就先看看这个函数怎么用,我们依然以上篇中的Point类以及它的派生类PointImpl为例:
//Point泛型类的实现 public class Point<T> { private T x,y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() { return y; } public void setY(T y) { this.y = y; } } //PointImpl类的实现 public class PointImpl extends Point<Integer> { }从上面的代码中,我们可以看到,Point类是一个泛型类,具有一个泛型变量T;而PointImpl派生自Point并且在派生时,将Point进行填充为Point,即将Point中的泛型变量填充为Integer类型。
Class<?> clazz = PointImpl.class; Type type = clazz.getGenericSuperclass(); if (type instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) type; //返回表示此类型实际类型参数的 Type 对象的数组 Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); for (Type parameterArgType : actualTypeArguments) { Class parameterArgClass = (Class) parameterArgType; Log.d(TAG,"填充类型为:" + parameterArgClass.getName()); } //返回 Type 对象,表示声明此类型的类或接口。 Type type1 = parameterizedType.getRawType(); Class class22 = (Class) type1; Log.d(TAG,"PointImpl的父类类型为:"+class22.getName()); }相信上面这段代码,大家肯定是很不懂的。。。。因为确实狠复杂,不管那些,我们先看看结果:
夯实JAVA基本之二 —— 反射(2):泛型相关周边信息获取
标签:
原文地址:http://blog.csdn.net/harvic880925/article/details/50085595